一、需求
依据如图的数据花样,传入到Action,用一个UserInfo Model吸收,需求异常简朴。
剖析后我们能够看到,个中兴趣是个字符串的数组,用户包括一个公司对象,然后所包括的公司对象中又有个电话数组,用户又包括数组对象,所以我们的Model应当是:
public class UserInfo {public string Name { get; set; }public int Age { get; set; }public string[] Bobbys { get; set; }public Company Company { get; set; }public Star[] Star { get; set; } }public class Company {public string Name { get; set; }public string Address { get; set; }public string[] Tel { get; set; } }public class Star {public string Name { get; set; }public int Age { get; set; }public string Movie { get; set; } }
二、表单提交扫盲与考证
我们在提交表单时不管是post照样get提交,我们所提交的数据大部分都是键值对的花样,并不会直接传入个json对象至背景,最多也只会传入个字符串的json,这个或许是受ajax data设置的误导,许多人都邑以为能够直接设置json对象提交至背景,或许花样简朴的Model能够吸收到,然则庞杂一点的,比方个中包括数组的等,纵然json的花样和Model的花样一致,Model并不会吸收到前台的提交的数组数据,这个也是我文章刚开始所提的一个题目。
为了考证我说的ajax提交json花样的数据,我们做一下考证。
Action:
[HttpPost]public ActionResult Index(UserInfo user) {return Json(user); }
Ajax:
$.ajax({ url: "/", type: "post", data: {"name": "Emrys", "age": "26", "bobbys": ["足球", "影戏"], "company": { "name": "上海xxxxxx公司", "address": "上海徐汇区xxxx路", "tel": [ "021-88888881", "021-88888882", "021-88888883", "021-88888884" ] }, "star": [ { "name": "成龙", "age": "63", "movie": "十二生肖" }, { "name": "刘亦菲", "age": "18", "movie": "工夫之王" }, { "name": "胡歌", "age": "24", "movie": "琅琊榜" } ] }, success: function (r) { console.log(r); } });
这个是我们常常提交的data数据花样,假如我们背景的model花样纵然和data的数据花样如出一辙,也只要name一项能够一般吸收到数据,其他的一切数据都将吸收不到,至于为何。我们看一下jquery给我们转成的键值对的花样就应当晓得了,我们从chrome或许火狐的调试东西的network中能够看到提交的花样。
个中数组的花样为:xxxxxx[]的花样,对象中的对象花样为xxxx[yyyyy]花样,我没有探讨为何是这个花样,或许是其他的言语须要如许的花样,php,jsp或许其他的言语吧,但asp.net mvc很明显不须要如许的花样。
背面是毁三观的考证,效果效果居然全都能用Model吸收到数据,吸收到了,吸收到,吸收,接,了,我。。。。。。。。。倏忽觉得有一百个谁人什么飞过啊。。。。。。。。。。
我一度疑心本身,岂非之前做了几年mvc的开辟的模子绑定明白错了,之前开辟用jquery的ajax转成的花样是不能吸收到数据的啊,那是为何为何啊。经由探究测试发明,我之前也没有明白错,原来是版本的题目。我测试是用的mvc5做的测试,mvc5可能对jquery ajax转成的花样做了优化,然则mvc5之前的版本是不能够的,这个是重点。
那也就是说,假如你用的mvc5做的开辟,反而简朴了许多,能够直接在ajax的data设置json花样的数据,庞杂的,数组都能够,或许微软开辟人员也发明了这个题目,在mvc5处理了,我并没有去研讨源码的区分,总之呢,mvc5是能够的。那mvc5之前的版本就会碰到我说的谁人题目了。
三、模子绑定剖析
博客模仿的表单已能够包括网站开辟过程当中碰到的大部分的表单花样了,包括一些数组、对象等等。
从之前的开辟的mvc项目中,发明了一些模子绑定的规律,区分在于数组和对象中的对象。
下面的图片是手动转成键值对的值,mvc5之前的版本能够实用的花样,固然mvc5也是能够辨认的,或许说这个花样是一切的mvc版本都能够实用的花样。
下图是两种花样的对照图
关于个中的划定规矩,本身总结吧,应当很简朴了。
有人会问,手动拼的花样应当怎样拼呢,这里常经常运用的有两种花样。
1、直接拼接字符串
$.ajax({ url: "/", type: "post", data: "name=Emrys&age=26&bobbys[0]=足球&star[0].movie=琅琊榜", success: function (r) { console.log(r); } });
2、javascript对象
var data1 = { name: "Emrys" }; data1.age = 26; data1["bobbys[0]"] = "足球"; data1["star[0].movie"] = "琅琊榜"; $.ajax({ url: "/", type: "post", data: data1, success: function (r) { console.log("xxxxxxxxxxxxxx"); console.log(r); } });
用户能够依据状况挑选差别的拼接体式格局。
四、总结
趁便分享一个技能,就是当我们拿到一段json的时刻,别急着在类中新建model,一个一个类,一个一个的属相敲,vs已供应了一个很壮大的东西,晓得的能够疏忽本段。
源码地点Github:
以上就是关于模子绑定的一些运用,本文原创,迎接拍砖和引荐。
系列课程
[asp.net mvc 奇淫巧技] 01 - 封装上下文 - 在View中猎取自定义的上下文
[asp.net mvc 奇淫巧技] 02 - 巧用Razor引擎在Action内生成Html代码
[asp.net mvc 奇淫巧技] 03 - 罗列特征扩大处理罗列定名题目和支撑HtmlHelper
[asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模子绑定吗?
以上就是运用Action的模子绑定实例教程的细致内容,更多请关注ki4网别的相干文章!