MVC 模型绑定介绍
在WebForm,获取提交表单的值一般都是Request.Form["Title"]这样的方式。在MVC中,提供了模型绑定机制。让后台获取表单或Url中的参数变得更加简单。
一、基本模型绑定
你可以直接在参数中用字符串,整型变量,实体或者是List<实体>的方式获取表单提交的参数。
参数中的这些东西都是与表单中的Html控件的name属性一一对应的。
public ActionResult PersonAdd(int Id)
{
return View();
}
例如以上代码,它能够匹配Url中的Id参数。如以下两种方法Id都能够匹配到1
http://localhost/Home/PersonAdd/1
http://localhost/Home/PersonAdd?Id=1
在例如如下代码:
public ActionResult PersonAdd(string Name)
{
return View();
}
它能够匹配到表单中提交的张三:
<input type="text" name="Name" value="张三" />
也能够匹配到Get请求的路径参数:
http://localhost/Home/PersonAdd?Name=张三
如果是用实体,则会检查该实体的属性名与表单中name属性中对应的标签的值。
例如有如下实体:
public class Person_Model
{
public int Id { get; set; }
public string Name { get; set; }
}
在Controller中的参数填写如下:
复制代码
[HttpPost]
public ActionResult PersonAdd(Person_Model model)
{
if (ModelState.IsValid) //此处仅作演示,不考虑安全性
{
//插入数据库省略
return Redirect("/Home/PersonManager");
}
return View();
}
复制代码
这样的话,模型绑定器会自动检查该实体的属性与Name一一对应的标签并绑定。如下表单的值将被绑定到model实体的属性中。
<input type="hidden" name="Id" value="1" />
<input type="text" name="Name" value="张三" />
二、显式模型绑定
UpdateModel与TryUpdateModel都用于显示模型绑定。如果绑定期间出现错误或者模型是无效的。
UpdateModel将抛出一个异常。因此UpdateModel要用try catch语句块包起来,而TryUpdateModel不会抛出异常,而是返回一个布尔类型的值,true表示绑定成功,false表示绑定失败。如:
复制代码
[HttpPost]