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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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

第一种方式

1
2
3
4
public  ActionResult Infancy(Person[] people)
{
     // ... 
}

Html表单构造

1
2
3
4
5
6
<input name= "people[0].FirstName"  type= "text"  value= "神"  />
<input name= "people[0].LastName"  type= "text"  value= "鱼"  />
<input name= "people[1].FirstName"  type= "text"  value= "郁闷的"  />
<input name= "people[1].LastName"  type= "text"  value= "PP"  />
<input name= "people[3].FirstName"  type= "text"  value= "重"  />
<input name= "people[3].LastName"  type= "text"  value= "典"  />

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

people%5B0%5D.FirstName=神&people%5B0%5D.LastName=鱼&people%5B1%5D.FirstName=郁闷的&people%5B1%5D.LastName=PP&people%5B3%5D.FirstName=重&people%5B3%5D.LastName=典

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

1
2
3
4
5
6
people[0].FirstName = "神" 
people[0].LastName = "鱼" 
people[1].FirstName = "郁闷的" 
people[1].LastName = "PP" 
people[3].FirstName = "重" 
people[3].LastName = "典"

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

1
2
3
people = new  Person[] {
     new  Person() { FirstName = "神" , LastName = "鱼"  },
     new  Person() { FirstName = "郁闷的" , LastName = "PP"  }  

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

第二种方式

1
2
3
4
public  ActionResult Infancy(IDictionary< string , Information> people)
     {
        // ...
     }  

Html表单构造

1
2
3
4
5
6
<input type= "text"  name= "people[0].Key"  value= "forever"  />
<input type= "text"  name= "people[0].Value.Age"  value= "12"  />
<input type= "text"  name= "people[0].Value.Gender"  value= "纯爷们"  />
<input type= "text"  name= "people[1].Key"  value= "郁闷的PP"  />
<input type= "text"  name= "people[1].Value.Age"  value= "50"  />
<input type= "text"  name= "people[1].Value.Gender"  value= "不好说"  />

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

1
2
3
4
5
6
people[0].Key = "forever" 
people[0].Value.Age = 12 
people[0].Value.Gender = "纯爷们" 
people[1].Key = "郁闷的PP" 
people[1].Value.Age = 50
people[1].Value.Gender = "不好说"

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

1
2
3
4
var  people = new  Dictionary< string , Information>() { 
   { "forever" , new  Information() { Age = 12, Gender = "纯爷们"  } }, 
   { "郁闷的PP" , new  Information() { Age = 50, Gender = "不好说"  } } 
};

这里解析key的方式是寻找parameterName[index].Key这样的结构、解析value的方式是寻找parameterName[index].Value这样的结构。如果key或者value是复杂类型(如上面例子中的Information类型),则parameterName[index].Key或parameterName[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。

更多IT相关的文章,欢迎光临我的个人网站:http://www.zuowenjun.cn/

本文转自 梦在旅途 博客园博客,原文链接:http://www.cnblogs.com/zuowj/p/4092789.html   ,如需转载请自行联系原作者
相关文章
|
Java
Java 中数组Array和列表List的转换
Java 中数组Array和列表List的转换
102 0
|
10月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
265 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
92 0
|
8月前
|
存储 安全 编译器
Python学习日记(一:List、Tuple、dictionary)
1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素,而元组就是一个整体,不能修改和删除,一定要修改或删除的话,只能修改和删除整个元组。 3.既然元组不能删除和修改,有什么作用呢? 1.元组比列表遍历速度快,因为元组是一个整体,运算效率高; 2.正是因为不能修改,元组可以保护不需要修改的数据,可以使代码结构更安全。
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
193 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
125 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
214 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
258 0
|
10月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
101 0
|
10月前
|
SQL XML Java
<foreach>元素中collection=list改成collection=array
<foreach>元素中collection=list改成collection=array

热门文章

最新文章