1,属性为引用类型(非集合,非数组)

//模型1
public class Contact
{
public string Name { get; set; }
public string PhoneNo { get; set; }
public string EmailAddress { get; set; }
public Address MyAddress { get; set; }
}
public class Address
{
public string Province { get; set; }
public string City { get; set; }
public string District { get; set; }
public string Street { get; set; }
}
//请求表单范例,name属性,具有显著的层次结构,注意子属性前缀用的是属性名MyAddress
<input name="Name" type="text" ... />
<input name="PhoneNo" type="text" ... />
<input name="EmailAddress" type="text" ... />
<input name="MyAddress.Province" type="text" ... />
<input name="MyAddress.City" type="text" ... />
<input name="MyAddress.District" type="text" ... />
<input name="MyAddress.Street" type="text"... />
public ActionResult Action(Contact foo){}

2,基于名称的简单类型数组绑定(名称必须相同)

//数据源范例
<input name="Foo" type="text" value=""/>
<input name="Foo" type="text" value="" />
<input name="Foo" type="text" value="" />
Public ActionResult ActionMethod(string[] foo){}//action的参数名“foo”,必须与表单中的name的值匹配

3,基于索引的对象数组绑定(索引必须从0开始,且连续,不连续会导致后面的绑定丢失)

//请求表单范例
<input name="[0].Name" type="text" value="" .../>
<input name="[0].PhoneNo" type="text" ... />
<input name="[0].EmailAddress" type="text" ... />
<input name="[1].Name" type="text" value="" .../>
<input name="[1].PhoneNo" type="text" ... />
<input name="[1].EmailAddress" type="text" ... />
 public ActionResult Index(Contact[] contacts){}

4,集合(除数组和字典之外的所有实现IEnumerable<T>接口的类型)

//请求表单范例
<input name="[0].Name" type="text" value="" .../>
<input name="[0].PhoneNo" type="text" value="" .../>
<input name="[0].EmailAddress" type="text" value="" .../> <input name="[1].Name" type="text" value="" .../>
<input name="[1].PhoneNo" type="text" value="" .../>
<input name="[1].EmailAddress" type="text" value="" .../>
//集合范例
public ActionResult Action(IEnumerable<Contact> contacts){
foreach (var contact in contacts){}
}

5,字典(实现了接口IDictionary<TKey,TValue>的类型)

//请求表单范例,注意Key的值不能重复,且索引要连续
<input name="[0].Key" type="text" value="Foo" .../>
<input name="[0].Value.Name" type="text" value="" .../>
<input name="[0].Value.PhoneNo" type="text" value="" .../>
<input name="[0].Value.EmailAddress" type="text" value="a@z.com" .../> <input name="[1].Key" type="text" value="Bar" .../>
<input name="[1].Value.Name" type="text" value="Bar" .../>
<input name="[1].Value.PhoneNo" type="text" value="" .../>
<input name="[1].Value.EmailAddress" type="text" value="b@z.com" .../>
public ActionResult Action(IDictionary<string, Contact> contacts)
{
foreach (string key in contacts.Keys)
{
Contact contact = contacts[key];
}
}

6,混合应用,属性是数组

public class QuizAnswer
{
public int QuizId { get; set; }
public string[] QuizAnswerArray { get; set; }//答案为数组 }
<!--第一题,单选-->
<input name="[0].QuizId" type="hidden" value="" />
<input name="[0].QuizAnswerArray" type="radiobox" value="A" />
<input name="[0].QuizAnswerArray" type="radiobox" value="B" />
<input name="[0].QuizAnswerArray" type="radiobox" value="C" />
<input name="[0].QuizAnswerArray" type="radiobox" value="D" /> <!--第二题,多选-->
<input name="[1].QuizId" type="hidden" value="" />
<input name="[1].QuizAnswerArray" type="checkbox" value="A" />
<input name="[1].QuizAnswerArray" type="checkbox" value="B" />
<input name="[1].QuizAnswerArray" type="checkbox" value="C" />
<input name="[1].QuizAnswerArray" type="checkbox" value="D" />
//控制器代码
public ActionResult SubmitAnswer(QuizAnswer[] answerArray)
{
foreach (var answer in answerArray)
{
}
}

7,混合应用,属性是集合

模型:属性是集合的情况

//公司
public class Company
{
public string Name { get; set; }
public string City { get; set; }
public IList<Job> JobList{ get; set; }//这里是个集合
}
//职位
public class Job
{
public string Title{ get; set; }
public string Detail{ get; set; }
}
//注意集合的前缀为List
<input name="Name" type="text" ... />
<input name="City" type="text" ... /> <input name="JobList[0].Title" type="text" ... />
<input name="JobList[0].Detail" type="text" ... /> <input name="JobList[1].Title" type="text" ... />
<input name="JobList[1].Detail" type="text" ... /> <input name="JobList[2].Title" type="text" ... />
<input name="JobList[2].Detail" type="text" ... />
//controller
Public ActionResult ActionMethod(Company company)
{
foreach(var job in company.JobList){}
}

参考http://www.cnblogs.com/artech/archive/2012/05/30/default-model-binding-02.html

MVC复杂类型的模型绑定的更多相关文章

  1. ASP.NET MVC Model之二模型绑定

    Asp.net mvc中的模型绑定,或许大家经常用,但是具体说他是怎么一回事,可能还是会有些陌生,那么,本文就带你理解模型绑定.为了理解模型绑定,本文会先给出其定义,然后对通过比,来得出使用模型绑定的 ...

  2. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  3. ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定

    原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...

  4. 白话学习MVC(六)模型绑定

    一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...

  5. ASP.NET MVC学习之模型绑定(2)

    3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了很多过程中的控制,所以我们就需要使用手工的方式进行绑定.下面我们通过一个例子来说明,首先打开 ...

  6. .NET MVC学习之模型绑定

    ASP.NET MVC学习之模型绑定(2)   继ASP.NET MVC学习之模型绑定继续 3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了 ...

  7. ASP.NET Core MVC 模型绑定用法及原理

    前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...

  8. ASP.NET没有魔法——ASP.NET MVC 模型绑定

    在My Blog中已经有了文章管理功能,可以发布和修改文章,但是对于文章内容来说,这里缺少最重要的排版功能,如果没有排版的博客很大程度上是无法阅读的,由于文章是通过浏览器查看的,所以文章的排版其实与网 ...

  9. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)

    上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...

随机推荐

  1. 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  2. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing

    题目链接:http://codeforces.com/contest/573/problem/C题目大意:在两行无限长的点列上面画n个点以及n-1条边使得构成一棵树,并且要求边都在同一平面上且除了节点 ...

  3. Linux环境变量从用户配置改为系统配置

    部署了一个新的tomcat到一个新的用户下,发下启动失败了 /home/personal/apache-tomcat/bin/catalina.sh: line 434: /usr/lib/jvm/j ...

  4. 嵌入式媒体处理(EMP)中的编码和解码

    我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件.如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注FP ...

  5. 南阳OJ 61 传纸条(一)

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  6. jenkins使用HTML Publisher Plugin插件 拉取报告样式缺失问题解决

    ---------------------------------------------------------临时解决方案----亲测ok 要解决该问题,方式也比较简单,就是修改Content S ...

  7. 在richtextbox中获取最真实的字符串像素大小

    设计器: partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.Com ...

  8. git的分布式和集中式

    当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面.

  9. C# winform程序免安装.net framework在XP/win7/win10环境运行!(转)

    C# winform程序免安装.net framework在XP/win7/win10环境运行!   前文: 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭 ...

  10. JS中有几种数据类型分别是哪几种

    number,string,boolean,null,undefined,object