Asp.net Mvc模型绑定
Asp.net Mvc模型绑定
Asp.net Mvc模型绑定一、Asp.net Mvc模型绑定的认识
任何控制器方法的执行都受action invoker组件(下文用invoker代替)控制。对于每个Action方法的参数,这个invoker组件都会获取一个Model Binder Object(模型绑定器对象)。Model Binder的职责包括为Action方法参数寻找一个可能的值(从HTTP请求上下文)。每个参数都可以绑定到不同的Model Binder;但是大部分情况我们都使用的是默认模型绑定器-DefaultModelBinder(如果我们没有显式设置使用自定义的Model Binder的话)。
每个Model Binder都使用它自己的特定算法来为Action方法参数设置值。默认模型绑定器对象大量使用反射机制。具体来说,对于每个Action方法参数,Model Binder都试图根据参数名去请求参数中寻找匹配的值。比如某个Action方法参数名为Text,那么ModelBinder会去请求上下文中寻找拥有相同名字的名值对(Entry)。如果找到,则Model Binder继续将Entry的值转换为Action方法参数类型。如果类型转换成功,转换后的值就被赋给那个Action方法参数,否则会抛出异常。
二、Asp.net Mvc默认模型绑定器特性
1.按顺序从四个数据源中寻找数据:Request.Form,RouteData.Values,Request.QuerySting,Request.Files
请求数据来源 | 说明 |
Request.Form | 通过表单提交的参数 |
RouteData.Values | 路由参数 |
Request.QueryString | 查询参数 |
Request.Files | 随请求上传的文件 |
2.原理:根据参数的名字,从数据源中寻找相同的键值对,然后赋值
3.支持类嵌套,支持数组,只要参数的类型和model的类型一致,就可以完全映射
4.可以屏蔽字段:Bind(Include="字段1,字段2"),Bind(Exclude="字段1,字段2")
5.可以手动触发:UpdateModel(),TryUpdateModel()
三、Asp.net Mvc模型绑定实例
1、没有模型绑定的时候
public ActionResult Example0()
{
if (Request.Form.Count > 0)
{
string id = Request.Form["Id"];
string fname =Request.Form["FirstName"];
string lname = Request.Form["LastName"];
ViewBag.StatusMessage = "Employee data received successfully for ID " + id + "!";
}
return View();
}
2、简单绑定数据
[HttpPost]
public ActionResult Example1(string id, string firstname, string lastname)
{
ViewBag.StatusMessage = "Employee data received successfully for ID " + id + "!";
return View();
}
页面内容
<tr>
...
<td>
<input name="Id" type="text" />
</td>
</tr>
<tr>
...
<td>
<input name="FirstName" type="text" />
</td>
</tr>
<tr>
...
<td>
<input name="LastName" type="text" />
</td>
</tr>
3、绑定一个类类型
[HttpPost]
public ActionResult Example2(Employee emp)
{
ViewBag.StatusMessage = "Employee data received successfully for ID " + emp.Id + "!";
return View();
}
类如下:
public class Employee
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
4、绑定一个类的属性
[HttpPost]
public ActionResult Example3(Employee emp)
{
ViewBag.StatusMessage = "Employee data received successfully for ID " + emp.Id + "!";
return View();
}
类如下:
public class Employee
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address
{
public string Street { get; set; }
public string Country { get; set; }
public string PostalCode { get; set; }
}
页面内容:
<tr>
...
<td>
<input name="HomeAddress.Street" type="text" /></td>
</tr>
...
<td>
<input name="HomeAddress.Country" type="text" /></td>
</tr>
...
<td>
<input name="HomeAddress.PostalCode" type="text" /></td>
</tr>
5、绑定简单类型的集合
[HttpPost]
public ActionResult Example4(IList<string> id, IList<string> name)
{
ViewBag.StatusMessage = "Employee data received successfully for " + id.Count + " records!";
return View();
}
页面内容:
...
<tr>
<td align="right" nowrap="nowrap" width="15%">
<input name="id" type="text" size="20" /></td>
<td>
<input name="name" type="text" />
</td>
</tr>
<tr>
<td align="right" nowrap="nowrap" width="15%">
<input name="id" type="text" size="20" />
</td>
<td>
<input name="name" type="text" />
</td>
</tr>
<tr>
<td align="right" nowrap="nowrap" width="15%">
<input name="id" type="text" />
</td>
<td>
<input name="name" type="text" />
</td>
</tr>
...
6、绑定一个类的集合
[HttpPost]
public ActionResult Example5(IList<Employee> employees)
{
ViewBag.StatusMessage = "Employee data received successfully for " + employees.Count + " records!";
return View();
}
页面内容:
...
<
标签:MVC
您可能感兴趣
- mvc中使用uploadify批量上传
- MVC中报get_RazorKeywords()错误的解决方法
- MVC中获取当前action、controller
- python如何编写一个用户登录系统(Python实现的登录验证系统完整案例基于搭建的MVC框架)
- mysql mvcc 流程(Mysql MVCC机制原理详解)
- mvc在视图中使用@helper封装输出代码
- MVC中modelstate的使用
- MVC扩展HtmlHelper实现CheckBoxList
- ASP.NET mvc异常处理的方法
- iiS7中如何部署MVC3程序
- php框架使用方法大全(PHP MVC框架中类的自动加载机制实例分析)
- MVC JsonResult的用法
- MVC中CheckBox
- mvc中Scripts.Render、Styles.Render
- mvc中Action前HttpPost的作用
- mysql数据结构讲解(详解MySQL 数据库隔离级别与MVCC)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
热门推荐
- video tv cast怎么用(video下autoplay属性无效的解决方法添加muted属性)
- python无法拒绝的表白代码教程(很酷的python表白工具 你喜欢我吗)
- ASP.NET函数返回多个值的几种方法
- 腾讯云服务器安装需要什么(免费的云服务器怎么申请?腾讯云服务器的申请流程)
- 创建数据库入门教程mysql(MySQL数据库安装教程一学就会)
- 购买了阿里云服务器之后怎么使用(阿里云服务器怎么买?阿里云服务器购买流程)
- dede栏目下有内容却不显示(dedecms列表不显示第一个元素如分隔符的简单方法)
- 用于播放视频文件的html5元素(html5自动播放mov格式视频的实例代码)
- 服务器宝塔面板使用教程(宝塔服务器管理助手Linux面板使用教程)
- dede如何添加自定义字段内容(织梦dede模板标签书写格式的规范和相关注意事项)