zoukankan      html  css  js  c++  java
  • ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的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的键和值。

  • 相关阅读:
    unity HideInInspector与SerializeField
    Unity3D之游戏架构脚本该如何来写(转)
    写在创业公司工作后
    工作选择
    指针引用
    sqrt函数实现
    超平面
    【读书笔记】读《程序员面试宝典》
    【小白学游戏常用算法】一、随机迷宫算法
    【Cocos2d-x游戏开发】浅谈游戏中的坐标系
  • 原文地址:https://www.cnblogs.com/Alex80/p/5523972.html
Copyright © 2011-2022 走看看