MVC复杂类型的模型绑定
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复杂类型的模型绑定的更多相关文章
- ASP.NET MVC Model之二模型绑定
Asp.net mvc中的模型绑定,或许大家经常用,但是具体说他是怎么一回事,可能还是会有些陌生,那么,本文就带你理解模型绑定.为了理解模型绑定,本文会先给出其定义,然后对通过比,来得出使用模型绑定的 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...
- 白话学习MVC(六)模型绑定
一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...
- ASP.NET MVC学习之模型绑定(2)
3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了很多过程中的控制,所以我们就需要使用手工的方式进行绑定.下面我们通过一个例子来说明,首先打开 ...
- .NET MVC学习之模型绑定
ASP.NET MVC学习之模型绑定(2) 继ASP.NET MVC学习之模型绑定继续 3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了 ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定
在My Blog中已经有了文章管理功能,可以发布和修改文章,但是对于文章内容来说,这里缺少最重要的排版功能,如果没有排版的博客很大程度上是无法阅读的,由于文章是通过浏览器查看的,所以文章的排版其实与网 ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...
随机推荐
- 6 字典和集合——《Swift3.0从入门到出家》
字典和集合 字典 字典是集合类型存放多个键值对,其中键是唯一的,不能重复 字典中存放的键值对是无序的,写入的顺序和读取的顺序可能不同 字典中存放的数据是任意类型 字典可以分为可变字典和不可变字典 创建 ...
- 64位linux下rpm安装mysql的5.5.55版本
昨天同事开了个阿里云环境,让我帮他安装mysql数据库,本想着很简单的一件事,结果还是折腾了一番.坑很多,一路趟过,一个接一个,只能硬着头皮冲. 首先是下载压缩包,因为采用了rpm安装方式,所以下载的 ...
- VS下QT的自定义槽函数修改方法
通过几天的摸索,基本发现了两个VS的槽函数的修改方法 一种是UI是通过UI 设计师拖出来的,类似VB的方法,通过拖的方法,按钮的代码是系统自动生成的,在UI.h的头文件下,这个时候,实现槽函数有个固定 ...
- week01—绪论
一.作业题目 仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数基本运算: 构造有理数T,元素e1,e2分别被赋以分子.分母值 销 ...
- selenium定位方法
- Mongodb3.0 新增用户身份验证db.createUser()
定义:创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误. 语法:db.createUser(user, writeConcern) user这个文档创 ...
- 模块的分类以及time与date time 模块 radom模块
1.标准库,或者内置模块,python解释器自带的,比如sys,os模块 2.开源模块,或者叫第三方模块,python就强大在这里. 3.自定义模块. 标准库: 1.时间模块time与datetime ...
- MySQL写出高效SQL
mysql设计标准事务处理标准索引使用标准约束设计sql语句标准 怎么写出高效SQL清晰无误的了知业务需求满足业务需求,不做无用功知道表数据量和索引基本情况知道完成SQL需要扫描的数据量级SQL执行计 ...
- js作用域和作用域链
作用域 首先要知道一点,js跟python都是一样的,先编译后执行 唯一的区别在于,js对于只声明,未定义的变量,报错是未定义,后面代码会有这个例子 编译的过程只有赋值和开辟空间的过程 只有函数,类才 ...
- Nginx反向代理图片总结
配置需求: 内网192.168.80.205的机器上部署了一个Web项目,下文称web, url为http://192.168.80.205:8082. 并且使用nginx访问图片,url格式 ...