ajax 传递数组类型参数后台接收不到的问题
在做排序功能的时候需要将一个数组的数据传递到后台,(当时怎么没用json,如果用json就没有那么多的事情了),数据提交采用ajax!
先看代码
js:
submitbtn: function () { // 提交 $("#submitbtn").click(function () { $.dialog.confirm("确定要提交吗?", function () { var arr = []; $(".title").each(function () { var orderindex = $(this).data("index") arr.push(orderindex); }) //查看数据是否存在 console.log(arr); $.ajax({ url: "ChangePaymentTypeLevel", data: { array: arr }, type: "post", dataType: "json", dynsc: false, //traditional: true, success: function (res) { $.dialog.alert(res, function () { window.parent.location.reload(); }); } }) }); }); }
后台:
/// <summary> /// 批量修改支付类型排序 /// </summary> /// <param name="array"></param> /// <returns></returns> [HttpPost] public JsonResult ChangePaymentTypeLevel(string[] array) { List<int> list = array.Select<string, int>(b => Convert.ToInt32(b)).ToList(); var result = ConfigService.ChangePaymentTypeLevel(list); if (result) { return Json("操作成功!"); } else { return Json("操作失败!"); } }
问题是:在js中确实拿到了数据,而且在console中可以展示出来,但是ajax提交到后台的时候总是拿不到,不管是用string[] 还是采用List<string>甚至看Request中对象都没有数据。
查了资料后知道是ajax数据提交的问题,如果是一个数组需要对traditional进行配置://traditional: true;
官方文档的解释如下:
traditional
类型:Boolean,jq中默认为false
如果你想要用传统的方式来序列化数据,那么就设置为 true。
Set this to true if you wish to use the traditional style of param serialization
嗯,很简单,自己不知道,如果传递数组的话也可以使用json,只不过你用json多了只有可能就忘记了怎么用数组了!
有得必有失吧!
zk-20170905