MVC模型绑定
在项目中使用MVC的时候,我们无需像WebForm那样手动获取值再赋值到Model上,这得益于MVC的模型绑定,下面就介绍下复杂类型的模型绑定
Controller:
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View();
} [HttpPost]
public ActionResult Index(Person person)
{
return Json(person);
}
}
Model:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public List<Role> Roles { get; set; }
} public class Address
{
public string Country { get; set; }
public string City { get; set; }
} public class Role
{
public string Name { get; set; }
}
View:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
//如果没有复杂类型,也可以使用这种
//var jsonData = {
// Id: 1,
// Name: "李四"
//};
//$.post("/home/index", jsonData, function (data) {
// console.log(data);
//});
var paramsUrl = "Id=1&Name=李四&Address.City=广州&Address.Country=中国&Roles[0].Name=管理员&Roles[1].Name=科长&Roles[2].Name=馆长";
$.post("/home/index", paramsUrl, function (data) {
console.log(data);
});
</script>
</head>
<body>
<div>
</div>
</body>
</html>
发送请求 post参数:

返回:

在MVC5(5.2.3.0)之前我们需要拼接成这种参数后台Index(Person person)才能接收到对应值,但是MVC5(5.2.3.0)版本的时候可以直接传递Json对象
升级为MVC5.2.3.0后,只需改视图即可:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
var jsonData = {
Id: 1,
Name: "李四",
Address: { City: "广州", Country: "中国" },
Roles: [{ Name: "管理员" }, { Name: "科长" }, { Name: "馆长" }]
};
$.post("/home/index", jsonData, function (data) {
console.log(data);
});
</script>
</head>
<body>
<div>
</div>
</body>
</html>
发送请求post参数,这里会将url转码:

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

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

另外还可以使用Bind特性来决定需要绑定哪些属性
[HttpPost]
public ActionResult Index([Bind(Include = "Name,Age")]Person per)
{
return Json(per);
}
[Bind(Include = "Name,Age")] 表示只绑定Person对象中的Name和Age属性,其他属性则为默认值
[Bind(Exclude = "Name,Age")] 这个表示不绑定Person对象中的Name和Age属性
也可以直接在Model加上BindAttribute来决定绑定和不绑定哪些属性
[Bind(Include="Name,Age")]
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Bind还有一个参数是Prefix,这个是用来指定前缀,具体看下面例子
Model:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public Address Address1 { get; set; }
}
View:
<form action="/home/index" method="post">
@Html.TextBoxFor(p => p.Address1.City)
@Html.TextBoxFor(p => p.Address1.Country)
<input type="submit" value="提交" />
</form>
Action:
[HttpPost]
public ActionResult Index(Address address)
{
return Json(address);
}
提交的内容:
返回:
如果在不使用Prefix的情况下我们是获取不到提交的值的,使用Prefix:
[HttpPost]
public ActionResult Index([Bind(Prefix = "Address1")]Address address)
{
return Json(address);
}
加上[Bind(Prefix = "Address1")]:
灵活运用将会在开发过程中如鱼得水,哈哈
MVC模型绑定的更多相关文章
- ASP.NET MVC模型绑定的6个建议(转载)
ASP.NET MVC模型绑定的6个建议 发表于2011-08-03 10:25| 来源博客园| 31 条评论| 作者冠军 validationasp.netmvc.netasp 摘要:ASP.NET ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定
在My Blog中已经有了文章管理功能,可以发布和修改文章,但是对于文章内容来说,这里缺少最重要的排版功能,如果没有排版的博客很大程度上是无法阅读的,由于文章是通过浏览器查看的,所以文章的排版其实与网 ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...
- asp.net Mvc 模型绑定项目过多会导致页面运行时间卡
asp.net Mvc 模型绑定项目过多会导致页面运行时间卡的问题. 解决方式就是采用ModelView方式进行精简,已减少模型绑定及验证的时间.
- [转] ASP.NET MVC 模型绑定的功能和问题
摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术, ...
- .net core mvc 模型绑定 之 json and urlencoded
.net core mvc 模型绑定, FromQuery,对应 url 中的 urlencoded string ("?key1=value1&key2=value2") ...
- ASP.NET MVC——模型绑定
这篇文章我们来讲讲模型绑定(Model Binding),其实在初步了解ASP.NET MVC之后,大家可能都会产生一个疑问,为什么URL片段最后会转换为例如int型或者其他类型的参数呢?这里就不得不 ...
- MVC 模型绑定
在WebForm,获取提交表单的值一般都是Request.Form["Title"]这样的方式.在MVC中,提供了模型绑定机制.让后台获取表单或Url中的参数变得更加简单. 一.基 ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)
前面文章介绍了ASP.NET MVC中的模型绑定和验证功能,本着ASP.NET MVC没有魔法的精神,本章内容将从代码的角度对ASP.NET MVC如何完成模型的绑定和验证进行分析,已了解其原理. 本 ...
随机推荐
- 传统IT七大职业的云计算转型之路
毫无疑问,对于那些传统IT技术--企业架构师.系统管理者.测试验收工程师或者网络工程师等开发人员骑身到云计算行业不仅是大势所趋,也能为其带来工作的保证,薪酬也更加丰厚. 如今,企业上云已经成为不可阻挡 ...
- 玩adb和fastboot
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380143fd3d1027fa3c215cc790a1b18 ...
- 【题解】APIO2007动物园
首先一眼感受到这题特别的性质……5个?这么小的,感觉就像是状压.脑补了一下,如果没有环的话应该很好做吧……有环怎么办?5真的很小的,随便乱搞肯定也可以.那就放在外面暴力枚举吧.然后正解就出来了. 然而 ...
- 雅礼集训 Day3 T3 w 解题报告
w 题目背景 \(\frac 14\)遇到了一道水题,双完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607^2\)眼就切掉了这题,嘲讽了\(\frac 14 ...
- Link Cat Tree (连喵树) 学习笔记
Link Cat Tree 一.感性定义 所谓连喵树,即一种对森林支持修改,查询,连边,删边等操作的数据结构(姑且算她是吧).她用一颗颗互相连接的辅助树维护原森林的信息,辅助树相互连接的边叫虚边,辅助 ...
- NAS星云链 入门之从零开发第一个DAPP
应该有很多小伙伴和我一样,一直想去入手学习区块链,但是总无从下手,有些概念感觉理解了,有感觉没理解.其实这都是“没实践”的锅. 所谓看十遍不如想一遍,想一遍不如做一遍.这不最近星云链nebulas正有 ...
- Spring validation 后端校验【转】
本文来自 下一秒升华 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u013815546/article/details/77248003?utm_source=co ...
- arraylist和array的不同之处
https://www.cnblogs.com/wangbin2188/p/6524200.html
- Spring学习-- SpEL表达式
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...
- L2-002. 链表去重---模拟
https://www.patest.cn/contests/gplt/L2-002 L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...