在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List、Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Action参数的。

有这样的一个Model类Person将作为Action的参数

Model,Person.cs:

  1. public class Person
  2. {
  3. public string FirstName { get; set; }
  4. public string LastName { get; set; }
  5. }

一、ASP.NET MVC中的Model绑定List集合方法

1、HomeController的有一Action为Add:

  1. public ActionResult Add()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public ActionResult Add(List<Person> persons, List<string> movies)
  7. {
  8. return View();
  9. }

2、视图,Add.cshtml:

  1. @model WebApplication1.Models.Person
  2. @{
  3. ViewBag.Title = "Add";
  4. }
  5. <h2>Add</h2>
  6. @using (Html.BeginForm())
  7. {
  8. <h4>First Person</h4>
  9. @:FirstName:@Html.TextBox("[0].FirstName") &nbsp;
  10. @:LastName:@Html.TextBox("[0].LastName")
  11. <h4>Second Person</h4>
  12. @:FirstName:@Html.TextBox("[1].FirstName") &nbsp;
  13. @:LastName:@Html.TextBox("[1].LastName")
  14. <h3>movies:</h3>
  15. @:1:@Html.TextBox("movies")<br />
  16. @:2:@Html.TextBox("movies")<br />
  17. @:3:@Html.TextBox("movies")<br />
  18. <div class="form-group">
  19. <div class="col-md-offset-2 col-md-10">
  20. <input type="submit" value="Create" class="btn btn-default" />
  21. </div>
  22. </div>
  23. }

说明:

视图中的”@:“表示输出一行纯字符串,或者是一行未闭合的html标记,这个对于不想输出html标记的行非常有用,上面如果没加”@:“就会报错。First Person和Second Person输入的值绑定到参数persons,这个List会有两个类型为Person的对象。这里用了[index].字段名来告诉ASP.NET MVC默认Model Binder来帮我们把输入值绑定到相应类型参数对象的字段上去。movies:输入的值绑定到参数movies,这个List会有三个类型为字符串的元素。

二、ASP.NET MVC中的Model绑定Dictionary集合方法

1、HomeController加上Register的Action:

  1. public ActionResult Register()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public ActionResult Register(IDictionary<string, Person> people)
  7. {
  8. return View();
  9. }

2、视图,Register.cshtml:

  1. @model WebApplication1.Models.Person
  2. @{
  3. ViewBag.Title = "Register";
  4. }
  5. <h2>Register</h2>
  6. @using (Html.BeginForm())
  7. {
  8. <h4>First Person</h4>
  9. <input type="hidden" name="[0].key" value="firstPerson" />
  10. @:First Name: @Html.TextBox("[0].value.FirstName")
  11. @:Last Name: @Html.TextBox("[0].value.LastName")
  12. <h4>Second Person</h4>
  13. <input type="hidden" name="[1].key" value="secondPerson" />
  14. @:First Name: @Html.TextBox("[1].value.FirstName")
  15. @:Last Name: @Html.TextBox("[1].value.LastName")
  16. <div class="form-group">
  17. <div class="col-md-offset-2 col-md-10">
  18. <input type="submit" value="Submit" class="btn btn-default" />
  19. </div>
  20. </div>
  21. }

说明:

上面其实也是[index].字段名来告诉ASP.NET MVC默认Model Binder来帮我们把输入值绑定到相应类型参数对象的字段上去(键:[0].key,值:[0].value.FirstName)。字段属性key和value,正好是Dictionary的键和值。

最新文章

  1. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
  2. Python列表去除重复元素
  3. struts2原理理解
  4. Swift使用注意
  5. 几个国内速度最快的centos yum(更新源)
  6. Java项目中的classpath
  7. VB 2015 的 闭包(Closure)
  8. SOCKSify Ruby
  9. wifi密码破解-Linux工具篇-video
  10. linux安装
  11. java 代码格式(转)
  12. Emoji表情在网页中显示
  13. webpack 1.x 学习总结
  14. php调用c/c++时 passthru()被禁用问题
  15. iOS逆向开发(6):微信伪造位置
  16. Linux:Gentoo系统的安装笔记(三)
  17. C#通过COM组件调用IDL的pro程序
  18. haier周的计算原则
  19. 学习node.js 第1篇 介绍nodejs
  20. ShellExecute使用详解

热门文章

  1. Teradata基础教程中的数据库试验环境脚本
  2. 论Oracle字符集“转码”过程
  3. easy ui datagrid 数据绑定
  4. ExtJS4.2学习(18)时间控件(转)
  5. replace()替换文字
  6. 团体程序设计天梯赛-练习集L1-012. 计算指数
  7. kafka.utils.Utils阅读
  8. unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条
  9. 时序列数据库武斗大会之什么是 TSDB ?
  10. 如何让WIN32应用程序支持MFC类库