使用Ajax方法提交多个对象数组的问题
2015-04-22 00:00
225 查看
当用$.ajax()向后台提交参数时,如果参数中数组的话一般在后台会用List<T>接收;但老是不成功如下面代码
list1[0][Name]:Tom
list1[0][Age]:17
list1[1][Name]:Jim
list1[1][Age]:22
list2[0][Name]:Tom2
list2[0][Age]:18
list2[1][Name]:Jim2
list2[1][Age]:24
C#中能识别的数组应该是这样的格式
list1[0].aa=1&list1[0].bb=2&list1[1].aa=3&list1[1].bb=4&list2[0].aa=1&list2[0].bb=2&list2[1].aa=3&list2[1].bb=4
在网上查找资料之后了解到ajax post之前会用因为jQuery需要调用jQuery.param序列化参数,我们来看下jquery源码
首先,traditional为false,我们可以通过设置traditional 为true阻止深度序列化
先写一个数组转为对象的方法:
这样一来问题就解决啦!
var arr1 = [{ "Name": "Tom", "Age": 17 }, { "Name": "Jim", "Age": 22}]; var arr2 = [{ "Name": "Tom2", "Age": 18 }, { "Name": "Jim2", "Age": 24}]; $(function () { $.ajax({ url: '/Home/UserAdd', data: {list1:arr1,list2:arr2}, success: function (msg) { if (msg == '1') { console.log('添加成功'); } else { console.log('添加失败'); } } }); })用Fiddler 监测之后发觉数据变成啦
list1[0][Name]:Tom
list1[0][Age]:17
list1[1][Name]:Jim
list1[1][Age]:22
list2[0][Name]:Tom2
list2[0][Age]:18
list2[1][Name]:Jim2
list2[1][Age]:24
C#中能识别的数组应该是这样的格式
list1[0].aa=1&list1[0].bb=2&list1[1].aa=3&list1[1].bb=4&list2[0].aa=1&list2[0].bb=2&list2[1].aa=3&list2[1].bb=4
在网上查找资料之后了解到ajax post之前会用因为jQuery需要调用jQuery.param序列化参数,我们来看下jquery源码
//在ajax()方法中,对json类型的数据进行了$.param()处理 if ( s.data && s.processData && typeof s.data !== "string" ) { s.data = jQuery.param( s.data, s.traditional ); } //param方法中 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); }); } else { // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( prefix in a ) { buildParams( prefix, a[ prefix ], traditional, add ); } }找到原因之后就好办啦
首先,traditional为false,我们可以通过设置traditional 为true阻止深度序列化
先写一个数组转为对象的方法:
Array.prototype.serializeObject = function (lName) { var o = {}; $t = this; for (var i = 0; i < $t.length; i++) { for (var item in $t[i]) { o[lName + '[' + i + '].' + item.toString()] = $t[i][item].toString(); } } return o; };
$.ajax({ url: '/Home/UserAdd', data: $.param(arr1.serializeObject("list1")) + "&" + $.param(arr2.serializeObject("list2")), success: function (msg) { if (msg == '1') { console.log('添加成功'); } else { console.log('添加失败'); } } });C#后台接收代码
public string UserAdd(List<User> list1, List<User> list2) { return "1"; } public class User { public string Name { get; set; } public int Age { get; set; } }
这样一来问题就解决啦!
相关文章推荐
- jQuery的ajax 方法提交多个对象数组问题 C# traditional $.param
- jQuery的ajax()方法提交数组问题
- 表单包含file上传文件提交,使用ajaxSubmint或者ajaxForm 遇到的问题以及解决方法
- jQuery的ajax()、post()方法提交数组,参数[] 问题
- jQuery的ajax()方法提交数组问题
- 关于form使用form.submit()提交的一个问题,提示form.submit不是对象的方法属性
- 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题
- 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题
- 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题
- jQuery 使用ajax提交遇到兼容性问题及解决方法
- jQuery的ajax 方法提交多个数组问题
- ajax提交数组和对象的方法
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- jQuery的ajax()方法提交数组问题
- javascript中创建对象,并序列化为json,通过$.ajax的提交json数据到后台方法,取值为null的问题
- 当某个类的prototype对象 中有数组时,通过该类的对象 并使用push方法就可以改变原型对象中数组的值
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- MVC中使用Ajax提交数据 Jquery Ajax方法传值到action
- 注册登录过程点滴(三):解决MVC3中使用Ajax.BeginForm会重复提交数据的问题
- 注册登录过程点滴(三):解决MVC3中使用Ajax.BeginForm会重复提交数据的问题