在Asp.Net MVC中使用ModelBinding构造Array、List、Collection以及Dictionary

在asp.net mvc中,我们可以在html表单中使用特定的格式传递参数,从而通过model binder构造一些集合类型。

 

第一种方式:

 

  

 

 

并在表单中添加这些input元素:

 

 

当其作为一个HTTP POST被提交后的数据大概是这个样子:

 

 

那么通过model binder我们将得到这样的一个Array集合:

 

 

这样就和我们在代码中显式的构建如下集合是一样的:

 

 

这里会按照parameterName[index].PropertyName的规则来解析属性。其中,索引必须是连续的且以0开始的正整数。在上面的例子中由于没有people[2],所以”重典”将不会被解析。

 

第二种方式

方法签名如下:

 

 

Html这样构造:

 

 

我们将会得到这样的键值集合:

 

 

如同我们在代码中这样构造:

 

 

 

这里解析key的方式是寻找parameterName[index].Key这样的结构、解析value的方式是寻找parameterName[index].Value这样的结构。如果key或者value是复杂类型(如上面例子中的Information类型),则parameterName[index].KeyparameterName[index].value将被视为前缀(也可以理解为某个类型)而.PropertyName被视为后缀(即某个属性)。这里的索引也要求必须是以0开始的不间断的正整数。否则断开以后的部分将不会被解析。

 

构建IEnumerable<T>, ICollection<T>, IList<T>, T[], Collection<T>, 以及 List<T>这类集合类型需要使用第一种语法。


而构建IDictionary<TKey, TValue>Dictionary<TKey, TValue>这类集合需要使用第二种语法。

 

如果你不喜欢这种方式,你完全可以在Asp.net mvc中自定义一些binder来处理特定的类型。或者直接使用FormCollection

 

参考资料:

 

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

 

http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

 

作者:紫色永恒

出处:http://024hi.cnblogs.com/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值