Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现。有时候我们的Action方法中想要接收数组类型的参数,如何写表单,使得Model能够自动绑定到数组参数上呢?
看下面的代码,Action方法UpdateStudents就需要IEnumerable<Student>类型的参数,用来批量更新Student数据。
[HttpPost] public ActionResult UpdateStudents(IEnumerablestudents) { //....save }
上面是一个非常典型的应用场景, 如何为表单中的field命名,能够使得提交表单的时候,model bind能够自动创建好IEnumerable<Student>类型的students呢?
下面就是在批量更新场景下的表单View代码
@using(Html.BeginForm()){ for (var i = 0; i < Model.Count(); i++ ) {} }id:@Html.TextBoxFor(m => m[i].Id)
name:@Html.TextBoxFor(m => m[i].Name)
age:@Html.TextBoxFor(m => m[i].Age)
再来看看生成html的表单的实际效果
可以看到对于集合数据的绑定,MVC中有自己的定义规则,所有的表单项都是[number].Field的形式。
上面是更新的例子,如果是批量添加数据,不能使用HtmlHelper,只要是提交的表单项按照这个规则来命名,MVC也能够自动绑定成集合对象。
关于Model Bidning,这里还有一篇文章