博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC模型绑定
阅读量:5068 次
发布时间:2019-06-12

本文共 2715 字,大约阅读时间需要 9 分钟。

在项目中使用MVC的时候,我们无需像WebForm那样手动获取值再赋值到Model上,这得益于MVC的模型绑定,下面就介绍下复杂类型的模型绑定

Controller:

1     public class HomeController : Controller 2     { 3         [HttpGet] 4         public ActionResult Index() 5         { 6             return View(); 7         } 8  9         [HttpPost]10         public ActionResult Index(Person person)11         {12             return Json(person);13         }14     }

Model:

1     public class Person 2     { 3         public int Id { get; set; } 4         public string Name { get; set; } 5         public Address Address { get; set; } 6         public List
Roles { get; set; } 7 } 8 9 public class Address10 {11 public string Country { get; set; }12 public string City { get; set; }13 }14 15 public class Role16 {17 public string Name { get; set; }18 }

View:

1 @{ 2     Layout = null; 3 } 4  5  6  7  8  9     
10 Index11 12 26 27 28
29 30
31 32

发送请求 post参数:

返回:

在MVC5(5.2.3.0)之前我们需要拼接成这种参数后台Index(Person person)才能接收到对应值,但是MVC5(5.2.3.0)版本的时候可以直接传递Json对象

升级为MVC5.2.3.0后,只需改视图即可:

1 @{ 2     Layout = null; 3 } 4  5  6  7  8  9     
10 Index11 12 23 24 25
26 27
28 29

发送请求post参数,这里会将url转码:

解码后【MVC5(5.2.3.0)之前不能接收 Address[City]=广州 这种方式的传值】:

返回(跟之前返回一样):

 

另外还可以使用Bind特性来决定需要绑定哪些属性

1         [HttpPost]2         public ActionResult Index([Bind(Include = "Name,Age")]Person per)3         {4             return Json(per);5         }

[Bind(Include = "Name,Age")] 表示只绑定Person对象中的Name和Age属性,其他属性则为默认值

[Bind(Exclude = "Name,Age")] 这个表示不绑定Person对象中的Name和Age属性

也可以直接在Model加上BindAttribute来决定绑定和不绑定哪些属性

1     [Bind(Include="Name,Age")]2     public class Person3     {4         public int Id { get; set; }5         public string Name { get; set; }6         public int Age { get; set; }7     }

Bind还有一个参数是Prefix,这个是用来指定前缀,具体看下面例子

Model:

1     public class Person2     {3         public int Id { get; set; }4         public string Name { get; set; }5         public int Age { get; set; }6         public Address Address1 { get; set; }7     }

View:

1         
2 @Html.TextBoxFor(p => p.Address1.City)3 @Html.TextBoxFor(p => p.Address1.Country)4
5

Action:

1         [HttpPost]2         public ActionResult Index(Address address)3         {4             return Json(address);5         }

提交的内容:

返回:

如果在不使用Prefix的情况下我们是获取不到提交的值的,使用Prefix:

1         [HttpPost]2         public ActionResult Index([Bind(Prefix = "Address1")]Address address)3         {4             return Json(address);5         }

加上[Bind(Prefix = "Address1")]:

灵活运用将会在开发过程中如鱼得水,哈哈

转载于:https://www.cnblogs.com/zuqing/p/5728601.html

你可能感兴趣的文章
保龄球计分
查看>>
在MySql中实现MemberShip的权限管理
查看>>
vim: vs sp 调整窗口高度和宽度
查看>>
预防数据库攻击
查看>>
建立组织级过程性能基线的注意事项
查看>>
coding++:java操作 FastDFS(上传 | 下载 | 删除)
查看>>
一道算法面试题(Lowerest Common Ancestor) 的几种解法
查看>>
数组的逆序出输出、查找一个元素
查看>>
Construct Binary Tree from Preorder and Inorder Traversal -- LeetCode
查看>>
【慢慢学Android】:4.Service的开机启动
查看>>
笔记--Day2--python基础2
查看>>
Vue,品牌列表案例(仅添加)
查看>>
数学(概率)CodeForces 626D:Jerry's Protest
查看>>
并发编程 19—— 显式的Conditon 对象
查看>>
软件测试必看的5本
查看>>
程序员必备的600单词
查看>>
hipster
查看>>
java:POI导出excel
查看>>
Web开发感悟:数据绑定是一种技术,更是一门艺术
查看>>
删除标题和边框
查看>>