jQuery post array - ASP.Net MVC 4
jQuery post array - ASP.Net MVC 4
今天我花了大约8个小时试图解决这个问题。我查看了很多解决方案,但没有得到相同的结果。我有一种直觉,这与我对ASP.Net相对新的经验有关。下面是我尝试模仿但却没有成功的最新问题。
基本问题概述:
我有一个json对象数组,我想传递给我的控制器。当我传递数据时,它显示了比如说3个项目,但它们的值没有被传递,或者什么都没有显示。Firebug显示它已经传递了,所以我假设某些设置不正确,它不能正确地在C#端设置该变量。
我尝试了几个方法,我将它们列在下面:
1. 我尝试模仿第二个链接中看到的内容:
$.ajax({ type: 'Post', cache: false, url: '/Workflow/Home/UpdateStepPositions', data: { 'steps': ['1','2','3'] }, async: false, success: function (data) { console.debug(data); }, error: function (data) { console.debug(data); } }); 控制器 [HttpPost] public ActionResult UpdateStepPositions(string[] steps){ var bresults = new { Success = false, Message = "无法更新步骤位置。" }; return Json(bresults); }
我甚至无法使这个简单的设置工作...它到达函数并显示没有传递任何内容....
2.
list = new Array(); list.push({ "step": 1, "position": 1 }); list.push({ "step": 2, "position": 2 }); list.push({ "step": 3, "position": 3 }); $.ajax({ type: 'Post', cache: false, url: '/Workflow/Home/UpdateStepPositions', data: JSON.stringify({ 'steps': list }), async: false, success: function (data) { console.debug(data); }, error: function (data) { console.debug(data); } }); 控制器 [HttpPost] public ActionResult UpdateStepPositions(Liststeps){ var bresults = new { Success = false, Message = "无法更新步骤位置。" }; return Json(bresults); } 类 public class UpdatedSteps { public string Step { get; set; } public string Position { get; set; } }
有人能告诉我我错过了什么或指点我正确的方向吗?希望它是一些简单的新手错误!
问题出现的原因是请求的contentType被设置为'application/json; charset=utf-8',但在控制器中无法正确解析这种类型的数据。解决方法是正确设置请求的数据类型,以便控制器可以正确解析数据。具体解决方法是将数据通过JSON.stringify方法转换为JSON格式的字符串,然后在请求中设置dataType为'json'。以下是正确设置的示例代码:
$(function () { $.ajax({ type: 'Post', dataType: 'json', url: '/Workflow/Home/UpdateStepPositions', data: JSON.stringify({ steps: ['1', '2', '3'] }), contentType: 'application/json; charset=utf-8', async: false, success: function (data) { console.debug(data); }, error: function (data) { console.debug(data); } }); });
通过这样的设置,请求的Content-Type将会是'application/json; charset=utf-8',控制器将能够正确解析请求的数据。
问题原因:在ASP.Net MVC 4中,当使用jQuery的post方法提交数组参数时,可能会遇到参数无法正确传递的问题。
解决方法:通过在jQuery的post方法中添加traditional:true参数来解决该问题。
具体实现如下:
$.ajax({ url: 'GetOrgs/CourseCatalog', method: "POST", traditional: true, data: {'checkedOrgIds': orgIds}, success: function(response) { // 处理返回结果 }, error: function(error) { // 处理错误 } });
其中,'GetOrgs/CourseCatalog'为请求的URL地址,method为请求方法,traditional为是否启用传统的方式序列化数组参数,data为要提交的数据。
使用上述方法,可以解决在ASP.Net MVC 4中使用jQuery的post方法提交数组参数时参数无法正确传递的问题。