相关疑难解决方法(0)

Asp.Net MVC 2 - 将模型的属性绑定到不同的命名值

更新(2016 9月21日) - 感谢Digbyswift评论此解决方案仍然适用于MVC5.

更新(2012 4月30日) - 注意那些在搜索等问题上遇到这个问题的人 - 接受的答案不是我最终如何做到这一点 - 但我接受了它,因为它可能在某些情况下有效. 我自己的答案包含我使用的最终解决方案,它可以重复使用并适用于任何项目.

它也被证实可以在MVC框架的v3和v4中工作.

我有以下模型类型(类的名称及其属性已更改以保护其身份):

public class MyExampleModel
{
  public string[] LongPropertyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将此属性绑定到一堆(> 150)复选框,其中每个输入名称当然都是LongPropertyName.

表单使用HTTP GET提交到url,并说用户选择其中三个复选框 - url将具有查询字符串 ?LongPropertyName=a&LongPropertyName=b&LongPropertyName=c

那么很大的问题是,如果我选择所有(甚至只有一半!)复选框,我超过了IIS上请求过滤器强制执行的最大查询字符串长度!

我不想扩展它 - 所以我想要一种方法来减少这个查询字符串(我知道我可以切换到POST - 但即便如此,我仍然希望最小化客户端发送的数据中的绒毛数量) .

我想要做的是LongPropertyName绑定到简单的'L',因此查询字符串将成为?L=a&L=b&L=c不更改代码中的属性名称.

有问题的类型已经有一个自定义模型绑定器(从DefaultModelBinder派生),但它附加到它的基类 - 所以我不想在那里为派生类放置代码.所有属性绑定当前都由标准的DefaultModelBinder逻辑执行,我知道它使用System.ComponentModel中的TypeDescriptors和Property Descriptors等.

我有点希望可能有一个属性我可以申请该物业来完成这项工作 - 是吗?或者我应该考虑实施ICustomTypeDescriptor

c# asp.net-mvc asp.net-mvc-2

49
推荐指数
3
解决办法
3万
查看次数

在ASP.MVC参数中使用短划线( - )

<% using (Html.BeginForm("SubmitUserName")) { %>
    <input type='text' name='user-name' />
    <input type='submit' value='Send' />
<% } %>
Run Code Online (Sandbox Code Playgroud)

什么应该是相应的Action方法的签名来接受user-name参数?

public ActionResult SubmitUserName(string user-name) {...}
Run Code Online (Sandbox Code Playgroud)

上面的方法签名由于某种原因不起作用;-)

我知道有一个ActionNameAttribute处理行动名称破折号的情况.有类似的东西ParameterNameAttribute吗?

c# asp.net-mvc-2

12
推荐指数
3
解决办法
8284
查看次数

标签 统计

asp.net-mvc-2 ×2

c# ×2

asp.net-mvc ×1