Asp.net Mvc 中的模型绑定

ASP.NET MVC 模型绑定通过引入自动填充控制器操作参数的抽象层、处理通常与使用 ASP.NET 请求数据有关的普通属性映射和类型转换代码来简化控制器操作。 虽然模型绑定看起来很简单,但实际上是一个相对较复杂的框架,由许多共同创建和填充控制器操作所需对象的部件组成。

asp.net mvc中的模型绑定可以在提交http请求的时候,进行数据的映射。

1.没有模型绑定的时候

 1 public ActionResult Example0()  2 {  3 if (Request.Form.Count > 0)  4  {  5 string id = Request.Form["Id"];  6 string fname =Request.Form["FirstName"];  7 string lname = Request.Form["LastName"];  8 ViewBag.StatusMessage = "Employee data received successfully for ID " + id  + "!";  9  } 10 return View(); 11 }

View Code

2.简单绑定数据

1 [HttpPost] 2 public ActionResult Example1(string id, string firstname, string lastname) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for ID " + id + "!"; 5 return View(); 6 }

页面内容

 1 <tr>  2 ...  3 <td>  4 <input name="Id" type="text" />  5 </td>  6 </tr>  7 <tr>  8 ...  9 <td> 10 <input name="FirstName" type="text" /> 11 </td> 12 </tr> 13 <tr> 14 ... 15 <td> 16 <input name="LastName" type="text" /> 17 </td> 18 </tr>

3.绑定一个类类型

1 [HttpPost] 2 public ActionResult Example2(Employee emp) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for ID " + emp.Id + "!"; 5 return View(); 6 }


 

类如下:

1 public class Employee 2 { 3 public string Id { get; set; } 4 public string FirstName { get; set; } 5 public string LastName { get; set; } 6 }

4.绑定一个类 属性

1 [HttpPost] 2 public ActionResult Example3(Employee emp) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for ID " + emp.Id + "!"; 5 return View(); 6 }

类如下:

1 public class Employee 2 { 3 public string Id { get; set; } 4 public string FirstName { get; set; } 5 public string LastName { get; set; } 6 public Address HomeAddress { get; set; } 7 }
1 public class Address 2 { 3 public string Street { get; set; } 4 public string Country { get; set; } 5 public string PostalCode { get; set; } 6 }


页面内容:

 1 <tr>  2 ...  3 <td>  4 <input name="HomeAddress.Street" type="text" /></td>  5 </tr>  6 ...  7 <td>  8 <input name="HomeAddress.Country" type="text" /></td>  9 </tr> 10 ... 11 <td> 12 <input name="HomeAddress.PostalCode" type="text" /></td> 13 </tr>


5.绑定简单类型的集合

1 [HttpPost] 2 public ActionResult Example4(IList<string> id, IList<string> name) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for " + id.Count + " records!"; 5 return View(); 6 }

页面内容:

 1 ...  2 <tr>  3 <td align="right" nowrap="nowrap" width="15%">  4 <input name="id" type="text" size="20" /></td>  5 <td>  6 <input name="name" type="text" />  7 </td>  8 </tr>  9 <tr> 10 <td align="right" nowrap="nowrap" width="15%"> 11 <input name="id" type="text" size="20" /> 12 </td> 13 <td> 14 <input name="name" type="text" /> 15 </td> 16 </tr> 17 <tr> 18 <td align="right" nowrap="nowrap" width="15%"> 19 <input name="id" type="text" /> 20 </td> 21 <td> 22 <input name="name" type="text" /> 23 </td> 24 </tr> 25 ...


6.绑定一个类的集合

IT经典笑语录:系统程序员:1、头皮经常发麻,在看见一个蓝色屏幕的时候比较明显,在屏幕上什幺都看不见的时候尤其明显;2、乘电梯的时候总担心死机,并且在墙上找reset键; 3、指甲特别长,因为按F7到F12比较省力; 4、只要手里有东西,就不停地按,以为是Alt-F、S;5、机箱从来不上盖子,以便判断硬盘是否在转; 6、经常莫名其妙地跟踪别人,手里不停按F10;7、所有的接口都插上了硬盘,因此觉得26个字母不够; 8、一有空就念叨“下辈子不做程序员了”; 9、总是觉得9号以后是a号; 10、不怕病毒,但是很害怕自己的程序;

1 [HttpPost] 2 public ActionResult Example5(IList<Employee> employees) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for " + employees.Count + " records!"; 5 return View(); 6 }

页面内容:

 1 ...  2 <tr>  3 <td align="right" nowrap="nowrap" width="15%">  4 <input name="[0].id" type="text" size="20" />  5 </td>  6 <td>  7 <input name="[0].FirstName" type="text" />  8 </td>  9 <td> 10 <input name="[0].LastName" type="text" /> 11 </td> 12 </tr> 13 <tr> 14 <td align="right" nowrap="nowrap" width="15%"> 15 <input name="[1].id" type="text" size="20" /> 16 </td> 17 <td> 18 <input name="[1].FirstName" type="text" /> 19 </td> 20 <td> 21 <input name="[1].LastName" type="text" /> 22 </td> 23 </tr> 24 25 ...

注意索引是从0开始,中间不间断

如果,遇到有动态的Add和Delete功能,则所以不好去设置,可以使用下面的方法:

添加一个隐藏控件,控件名称后缀为.Index

Controller不变,页面内容更改为:

 1 ...  2 <tr>  3 <td align="right" nowrap="nowrap" width="15%">  4 <input  type="hidden" name="employees.Index" value="100" />  5 <input name="employees[100].id" type="text" size="20" />  6 </td>  7 <td>  8 <input name="employees[100].FirstName" type="text" />  9 </td> 10 <td> 11 <input name="employees[100].LastName" type="text" /> 12 </td> 13 </tr> 14 <tr> 15 <td align="right" nowrap="nowrap" width="15%"> 16 <input  type="hidden" name="employees.Index" value="ccc" /> 17 <input name="employees[ccc].id" type="text" size="20" /> 18 </td> 19 <td> 20 <input name="employees[ccc].FirstName" type="text" /> 21 </td> 22 <td> 23 <input name="employees[ccc].LastName" type="text" /> 24 </td> 25 </tr> 26 ...


7.可自定义模型

1 [HttpPost] 2 public ActionResult Example6([ModelBinder(typeof(EmployeeBinder1))]Employee employee) 3 { 4 ViewBag.StatusMessage = "Employee data received successfully for " + employee.Id + "!"; 5 return View(); 6 }

绑定方法:

 1 public class EmployeeBinder1:IModelBinder  2 {  3 public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)  4  {  5 Employee emp = new Employee();  6 emp.Id = "E" + controllerContext.HttpContext.Request.Form["Id"];  7 emp.FirstName = controllerContext.HttpContext.Request.Form["FirstName"];  8 emp.LastName = controllerContext.HttpContext.Request.Form["LastName"];  9 emp.BirthDate = new DateTime(int.Parse(controllerContext.HttpContext.Request.Form["year"]), 10 int.Parse(controllerContext.HttpContext.Request.Form["month"]), 11 int.Parse(controllerContext.HttpContext.Request.Form["day"])); 12 return emp; 13  } 14 }
http://www.codes51.com/article/detail_95556.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。