在做排序功能的時候需要將一個數組的數據傳遞到后台,(當時怎么沒用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