Asp.net MVC中提交集合对象,实现Model绑定(转载)
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现。有时候我们的Action方法中想要接收数组类型的参数,如何写表单,使得Model能够自动绑定到数组参数上呢?
看下面的代码,Action方法UpdateStudents就需要IEnumerable<Student>类型的参数,用来批量更新Student数据。
[HttpPost]
public ActionResult UpdateStudents(IEnumerable<Student> students)
{ //....save
}
上面是一个非常典型的应用场景, 如何为表单中的field命名,能够使得提交表单的时候,model bind能够自动创建好IEnumerable<Student>类型的students呢?
下面就是在批量更新场景下的表单View代码
@using(Html.BeginForm())
{
for (var i = 0; i < Model.Count(); i++ )
{
<div style="border-bottom: 1px solid red;">
<p>id:@Html.TextBoxFor(m => m[i].Id)</p>
<p>name:@Html.TextBoxFor(m => m[i].Name)</p>
<p>age:@Html.TextBoxFor(m => m[i].Age)</p>
</div>
}
<input type ="submit"/>
}
再来看看生成html的表单的实际效果
<form action="/home/updatestudents" method="post"> <div style="border-bottom: 1px solid red;">
<p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[0].Id" type="text" value="1" /></p>
<p>name:<input name="[0].Name" type="text" value="Andrew Peters" /></p>
<p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[0].Age" type="text" value="18" /></p>
</div>
<div style="border-bottom: 1px solid red;">
<p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[1].Id" type="text" value="2" /></p>
<p>name:<input name="[1].Name" type="text" value="Brice Lambson" /></p>
<p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[1].Age" type="text" value="29" /></p>
</div>
<div style="border-bottom: 1px solid red;">
<p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[2].Id" type="text" value="3" /></p>
<p>name:<input name="[2].Name" type="text" value="Rowan Miller" /></p>
<p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[2].Age" type="text" value="56" /></p>
</div>
<input type ="submit"/>
</form>
可以看到对于集合数据的绑定,MVC中有自己的定义规则,所有的表单项都是[number].Field的形式。
上面是更新的例子,如果是批量添加数据,不能使用HtmlHelper,只要是提交的表单项按照这个规则来命名,MVC也能够自动绑定成集合对象。
Asp.net MVC中提交集合对象,实现Model绑定(转载)的更多相关文章
- Asp.net MVC中提交集合对象,实现Model绑定
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个中两个属性值的比较验证 具体应用场景为:要对两个属性值的大小进行验证 代码如下所示: /// ...
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcAppl ...
- Asp.net MVC 中的TempData对象的剖析
另一篇文章,也对TempData 做了很详细的介绍,链接地址:https://www.jianshu.com/p/eb7a301bc536 . MVC中的 TempData 可以在Controll ...
- Asp.net MVC中三大描述对象之ActionDescriptor 以及继承类ReflectedControllerDescriptor
ActionDescriptor抽象类中几个基本的属性: ControllerName:被描述的Controller名称,去除后缀Controller的名称.例如:HomeController则为Ho ...
- ASP.NET MVC中,动态处理页面静态化 【转载】
首先解释一下什么是动态处理页面静态化 对于需要静态化的页面,第一次访问某个Action时,会先执行Action,并在页面渲染后向Response和服务器中网站的目录下都写入需要返回的html,而第二次 ...
- 在ASP.NET MVC中如何预防Cookie的窃取攻击(转载)
Cookie Cookie is a small piece of data sent by a web server to a web browser. The browser stores thi ...
- 在ASP.NET MVC 中获取当前URL、controller、action 、参数
URL的获取很简单,ASP.NET通用:[1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录名 ...
随机推荐
- CodeForces 701B Cells Not Under Attack
题目链接:http://codeforces.com/problemset/problem/701/B 题目大意: 输入一个数n,m, 生成n*n的矩阵,用户输入m个点的位置,该点会影响该行和该列,每 ...
- WebSphere SSLC0008E 无法初始化 SSL 连接。未授权访问被拒绝,或者安全性设置已到期 解决方法
昨天安装websphere服务器中间件,安装完毕之后,安装验证如下: 猜测是SSL协议版本过低的问题,于是打开IE高级设置: 勾线之后,启动管理控制台: 成功启动web界面如下: 登陆试试:
- Android SDK Manager和AVD Manager使用
Android SDK Manager和AVD Manager使用(win7_64bit下测试) 目录 1.概述 2.本文用到的工具 3.安卓开发基础工具包下载 4.Android SDK Manag ...
- Google搜索命令语法大全
以下是目前所有的Google搜索命令语法,它不同于Google的帮助文档,因为这里介绍 了几个Google不推荐使用的命令语法.大多数的Google搜索命令语法有它特有的使用格式,希望大家能正确使用. ...
- Socket网络编程(2)--服务端实现
中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...
- linux下查看当前用户的 三个命令
linux下查看当前用户的 三个命令 1,whoami; 2,id -un; 3,who -H 可以列出当前所有的 NAME (用户名) LINE (窗口列表) TIME(开启时间 ...
- linux的cgroup控制
cgroup:control group-控制群组:将用户(的进程)加入某个群组(又叫控制器controller), 通过 指定群组对资源-cpu 内存 network等的使用,来限制用户对计算机资源 ...
- 怎样把excel一列分成多列
1,选定要分列的列. 2,点击“数据”-“分列”. 3,在选项栏中设置如图 4,选择分隔符 4,看,分开了吧!
- 是智能手机推动windows xp系统停止服务吗
昨天是windows xp系统停止服务的大限,各大媒体争相报道,漫天铺地的xp消息充斥网络,xp这个词的百度指数这段时间从4月1日的8411也开始猛涨,特别是这两天4月7日的36470飙升到4月8日的 ...
- IOS开发的目录结构
http://www.itjhwd.com/iosmolukaifa/ 目录结构 个人总结: =============================================== ...