如何清空网站空间,八宿县网站seo优化排名,网盘搜索 网站开发,高端网站建设流行风在QQ群或者一些程序的交流平台#xff0c;经常会有人问#xff1a;我怎么传一个数组在Action中接收、我传的数组为什么Action的model中接收不到、或者我在ajax的data中设置了一些数组#xff0c;为什么后台还是接收不了、还有一些怎么传送一个复杂的对象或者Action怎么接收一…在QQ群或者一些程序的交流平台经常会有人问我怎么传一个数组在Action中接收、我传的数组为什么Action的model中接收不到、或者我在ajax的data中设置了一些数组为什么后台还是接收不了、还有一些怎么传送一个复杂的对象或者Action怎么接收一个复杂的对象等等这些问题。或者有些人遇到复杂的对象或者数组直接就传送个json字符串然后在Action中把json字符串转成model对象当然这也是一种做法但也许不是最优的做法。 一、需求 按照如图的数据格式传入到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]格式我没有探究为什么是这个格式也许是其他的语言需要这样的格式phpjsp或者其他的语言吧但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: nameEmrysage26bobbys[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已经提供了一个很强大的工具知道的可以忽略本段。 源码地址Githubhttps://github.com/Emrys5/Asp.MVC-04-ModelBinding 以上就是关于模型绑定的一些应用本文原创欢迎拍砖和推荐。 系列课程 [asp.net mvc 奇淫巧技] 01 - 封装上下文 - 在View中获取自定义的上下文[asp.net mvc 奇淫巧技] 02 - 巧用Razor引擎在Action内生成Html代码[asp.net mvc 奇淫巧技] 03 - 枚举特性扩展解决枚举命名问题和支持HtmlHelper[asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗[asp.net mvc 奇淫巧技] 05 - 扩展ScriptBundle支持混淆加密javascript[asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的转载于:https://www.cnblogs.com/emrys5/p/asp-net-mvc-04-modelbinding.html