ASP.NET MVC 视图与模型绑定
来源:互联网 发布:win10上安装mac虚拟机 编辑:程序博客网 时间:2024/06/05 07:49
在ASP.NET MVC 中视图与模型是可以直接绑定的,这样就绕过了Controller。这种应用场景主要是做信息的提交,比如用户的注册,订单的提交等等。在蒋金楠的《ASP.NET MVC 5框架揭秘》中,他提出MVC视图与模型直接绑定容易带来“混乱”,建议在开发过程中对视图,模型及控制器的交互做好约定,或者使用MVP模式。MVP模式杜绝了视图与模型的直接交互,从根本上解决这个问题。今天我写了一个小例子,来看看视图与模型是如何直接绑定的及绑定的意义。
项目结构如上图所示,Models层单独抽出来,目前只有两个类,Product和User类,目前没有模型校验,因为不是这个章节的重点。
public ActionResult Index(){ return View();}[HttpPost]public string Index(User user){ return "Thank you :" + user.Name;}
控制器中的两个方法,一个是初次访问VIEW的时候用的,另一个是POST方法使用的。VIEW页面代码如下:
@model MyMvcApp.Models.User@{ Layout = null;}@using(Html.BeginForm("Index","Home",FormMethod.Post)){ <p>Your name :@Html.TextBoxFor(x=>x.Name)</p> <p>Your email:@Html.TextBoxFor(x => x.Email)</p> <p>Your phone:@Html.TextBoxFor(x => x.Phone)</p> <p>Your gender:@Html.DropDownListFor(x=>x.Gender,new[]{ new SelectListItem(){ Text = "I am a boy.", Value = "male", Selected = true }, new SelectListItem(){ Text = "I am a girl.", Value = "female", Selected = false }},"please select your gender")</p> <p><input type="submit" value="submit your information" /></p>}
可以发现这里引用model的方式比MVC2简单明了,@标签使用起来也更加清爽。MVC3在这方面确实比MVC2有很大的提高。效果如下:
这是信息提交界面,这里的输入框已经和模型进行了绑定,模型绑定最大的好处是可以使用模型校验,比如字段长度等等。在表单提交的时候,直接提交一个对象到后台进行处理,而不必再提交界面上的各个字段,简化了处理流程。
后台的这个方法接受到了一个对象,这样就不必再一个一个去获取。当然也可以那样来做。
Model与View的绑定还有另外一种形式的绑定,比如视图要展示一个列表的时候,这时候就需要绑定一个模型的集合,通常我们以IEnumerable<T>的形式来绑定。
我们的Product类如下:
namespace MyMvcApp.Models{ public class Product { public int ProductID { get; set; } public string ProductName { get; set; } }}
控制器里面可以这样写:
public ActionResult ProductDisplay(){ List<Product> listProduct = new List<Product>(); listProduct.Add(new Product() { ProductID = 1, ProductName = "产品001" }); listProduct.Add(new Product() { ProductID = 2, ProductName = "产品002" }); listProduct.Add(new Product() { ProductID = 3, ProductName = "产品003" }); ViewData.Model = listProduct; return View();}
控制器里面拿到数据的过程通常被抽提成一个业务逻辑层,这里为了演示不去写那么复杂。在VIEW层我们循环获取model的属性就可以了、
@model IEnumerable<MyMvcApp.Models.Product>@{ Layout = null;}<table border="2"><tr><td colspan="2">Product List</td></tr>@foreach (var item in @Model){ <tr> <td>@item.ProductID</td> <td>@item.ProductName</td> </tr>}</table>
注意这里的模型是一个可迭代的集合,因为我们展示的是一个列表。展示到界面上就是下面这个样子的。
关于模型与视图绑定这一个章节就介绍到这里。
- ASP.NET MVC 视图与模型绑定
- ASP.Net MVC 模型绑定
- ASP.NET MVC模型绑定
- ASP.NET MVC 音乐商店 - 3. 视图与模型
- 理解ASP.NET MVC中的模型绑定
- ASP.NET MVC 4 (九) 模型绑定
- Asp.net Mvc 中的模型绑定
- Asp.net Mvc 中的模型绑定
- ASP.NET MVC模型绑定——绑定部分字段
- asp.net mvc js与视图分离
- ASP.NET MVC 5 (二)动态输出、辅助器方法、模型绑定与添加验证
- [ASP.NET MVC 5 - 04] 控制器与模型及视图的交互
- 【ASP.NET MVC】视图
- ASP.NET MVC模型绑定的6个建议
- ASP.NET MVC模型绑定的6个建议
- ASP.NET MVC模型绑定的6个建议
- ASP.NET MVC 模型绑定的 6 个建议
- ASP.NET MVC Model Binding(模型绑定)
- rubygem若干常用选项参数
- UVa 116 - Unidirectional TSP
- MySQL增加Sequence管理功能
- UIScrollView简介
- 160A - Twins
- ASP.NET MVC 视图与模型绑定
- 如何避免2.4GHz ISM频段下各种无线设备的干扰
- dBm, dBi, dBd, dB, dBc
- 如何避免2.4GHz ISM频段下各种无线设备的干扰
- UVa 10131 - Is Bigger Smarter?
- 手机串号
- 数据结构关于二叉树的操作
- 【J2EE】【2.JDBC】JDBC连接数据库(MariaDB,Mysql)(继续之前jee的登陆例子)
- Direct3D纹理映射技术