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

注意人们在搜索等过程中遇到的问题-可以接受的答案不是我最终这样做的方式-但是我将其保留为接受,因为它在某些情况下可能有用。 我自己的答案包含了我使用的最终解决方案,该解决方案是可重用的,并且将适用于任何项目。


也已确认它可以在MVC框架的v3和v4中使用。


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


public class MyExampleModel

{

  public string[] LongPropertyName { get; set; }

}

然后,此属性绑定到一堆(> 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?


温温酱
浏览 667回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP