jQuery post array - ASP.Net MVC 4

15 浏览
0 Comments

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(List steps){
        var bresults = new {
            Success = false,
            Message = "无法更新步骤位置。"
        };
        return Json(bresults);
    }
   类
   public class UpdatedSteps {
    public string Step { get; set; }
    public string Position { get; set; }
}

有人能告诉我我错过了什么或指点我正确的方向吗?希望它是一些简单的新手错误!

0
0 Comments

问题出现的原因是请求的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',控制器将能够正确解析请求的数据。

0
0 Comments

问题原因:在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方法提交数组参数时参数无法正确传递的问题。

0