- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(我使用的是 ASP.NET MVC 2。)
使用 Url.RouteUrl(object)
时如何排除某些属性进入查询字符串?
具体来说,在传递给我的 View 的模型对象中,我有一个字符串数组(技术上是 IEnumerable
我认为带有 Exclude 的 Bind 属性应该这样做,但它不起作用。我试过把
[Bind(Exclude = "Sizes")]
在我的课上,但我不断收到如下所示的 URL:
http://localhost/?Sizes=System.String[]
最佳答案
扩展方法和反射来救援!
/// <summary>
/// Add UrlHelper extension methods that construct outgoing URL's but
/// remove route values that are excluded by the Bind attribute's
/// Include or Exclude. The methods to mirror are those that take an
/// object as an argument:
///
/// public string Action(string actionName, object routeValues);
/// public string Action(string actionName, string controllerName
/// , object routeValues);
/// public string Action(string actionName, string controllerName
/// , object routeValues, string protocol);
///
/// public string RouteUrl(object routeValues);
/// public string RouteUrl(string routeName, object routeValues);
/// public string RouteUrl(string routeName, object routeValues
/// , string protocol);
/// </summary>
public static class UrlHelperExtensions
{
public static string Action(this UrlHelper helper, string actionName
, object routeValues, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
// Internally, MVC calls an overload of GenerateUrl with
// hard-coded defaults. Since we shouldn't know what these
// defaults are, we call the non-extension equivalents.
return helper.Action(actionName, routeValues);
}
public static string Action(this UrlHelper helper, string actionName
, string controllerName, object routeValues
, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
return helper.Action(actionName, controllerName, finalRouteValues);
}
public static string Action(this UrlHelper helper, string actionName
, string controllerName, object routeValues
, string protocol, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
return helper.Action(actionName, controllerName
, finalRouteValues, protocol);
}
public static string RouteUrl(this UrlHelper helper, object routeValues
, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
return helper.RouteUrl(finalRouteValues);
}
public static string RouteUrl(this UrlHelper helper, string routeName
, object routeValues, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
return helper.RouteUrl(routeName, finalRouteValues);
}
public static string RouteUrl(this UrlHelper helper, string routeName
, object routeValues, string protocol
, bool onlyBoundValues)
{
RouteValueDictionary finalRouteValues =
new RouteValueDictionary(routeValues);
if (onlyBoundValues)
{
RemoveUnboundValues(finalRouteValues, routeValues);
}
return helper.RouteUrl(routeName, finalRouteValues, protocol);
}
/// <summary>
/// Reflect into the routeValueObject and remove any keys from
/// routeValues that are not bound by the Bind attribute
/// </summary>
private static void RemoveUnboundValues(RouteValueDictionary routeValues
, object source)
{
if (source == null)
{
return;
}
var type = source.GetType();
BindAttribute b = null;
foreach (var attribute in type.GetCustomAttributes(true))
{
if (attribute is BindAttribute)
{
b = (BindAttribute)attribute;
break;
}
}
if (b == null)
{
return;
}
foreach (var property in type.GetProperties())
{
var propertyName = property.Name;
if (!b.IsPropertyAllowed(propertyName))
{
routeValues.Remove(propertyName);
}
}
}
}
关于asp.net-mvc - MVC RouteUrl 不尊重 Exclude 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400838/
我有这样的情况: ids = [None, None, None] foo = Foo.objects.filter(common=True).exclude(id__in=ids) 这似乎总是排除所
我创建了一个简单的测试目录: ├── backup.tgz ├── Dummy-dir │ ├── dummy-file-a.txt │ ├── dummy-file-b.txt │ ├─
有了这个 persistence.xml : org.eclipse.persistence.jpa.PersistenceProvider osgi:s
我正在使用 powershell 更新索引策略,但它默认在排除路径中添加 "path": "/\"_etag\"/?" 属性我希望索引策略是 { "indexingMode": "consis
我正在使用 Django 查询从表中过滤掉一些事务,其中一个事务可能在表中有多个条目。 例如示例表 +---------------+---------+ | TransactionId | Stat
我使用 eclipselink 作为 JPA 提供程序,并且需要将实体保存在 jar 文件中。所有 jar 实体都用 @Entity 进行注释。我尝试了 false 和 true 但它没有自动检测实体
这是 Ignore files in git log -p 的后续行动也与Making 'git log' ignore changes for certain paths有关. 我正在使用 Git
我在 Android Studio 中导入了一个库项目,但我无法排除一个组,因为当 compile 指令位于包含的项目中时,gradle 找不到那个 exclude 方法方法? 它可以找到以下方法的排
我正在使用 gitbash 和 git 版本 2.20.1.windows.1。 commit , diff , branch一切正常,但 git status (当然是最基本的命令?)失败。错误信息
假设最开始的命令是这样的 rsync -e 'ssh -p 30000' -avl --delete --stats --progress demo@123.45.67.890:/home/demo
我有一个我想忽略的日期列表: private val excludeDates = List( new DateTime("2015-07-17"),
我有一个这样的表: DESC mytable id | parent 1 | 2 2 | null 3 | null 4 | null 5 | 3 ... | ... 3种条目:
首先,这是我的代码: Bill: 它应该像这样工作: 当我点击“搜索”时,URL 应更改为 "shpapp01/Web/Public.html#/PublicWeb/Tracking/Searc
我继承了一堆C#代码。对于几个方法定义,我找到了 ///作为它前面唯一的 XMLDoc。我试图用谷歌搜索它的含义,但没有成功。有人可以解释一下这可能意味着什么吗? 最佳答案 在NDoc至少,这意味着应
我在将单个目录从远程机器复制到本地时遇到问题。 这是我使用的命令: rsync -chavzP --stats --exclude='/var/www/html/px3' root@IPHERE:/v
我有一个从 1 到 100 的数组: array=$(seq 100) 我的任务是排除 60 到 80 的范围。 最佳答案 您可以将参数扩展与偏移/长度规范一起使用。 #! /bin/bash arr
背景 我一直在使用 Exclude和 Extract实用程序类型,但遇到过我只想匹配确切类型而不是子类型的情况。 到目前为止 我已经成功创建了一个 StrictExtract只提取完全匹配的类型的实用
我在 Windows 上,使用 Subersive 运行 Eclipse Indigo 以连接到 远程 svn 仓库。 我有一个项目 check out 到本地文件夹。项目中有一些目录我想从 chec
我正在 Django 中创建一个稀疏的首选项表。我的模型很简单: class Preference(models.Model): user = models.ForeignKey(settin
我有一个 tar/gzip 文件,我正在使用 ansible unarchive 模块提取到主机列表。 以下是configs.tgz的部分内容列表: -rw-rw-r-- ian/ian
我是一名优秀的程序员,十分优秀!