使用JQuery Ajax在MVC中发布一个数组会导致500(内部服务器错误)

22 浏览
0 Comments

使用JQuery Ajax在MVC中发布一个数组会导致500(内部服务器错误)

我有一个像这样的数组:\n

var nums=["21", "22", "23", "20", "19", "18"];

\n还有这段 JQuery Ajax 代码:\n

 $('#chk').click(function () {
    $.ajax({
        url: "/BarberShop/ServiceUpdate",
        type: "Post",
        data:{ nums: nums},
        dataType: "json",
        success: function (data) {
        }
    });
});

\n以及这个控制器动作:\n

    [HttpPost]
    public ActionResult ServiceUpdate(string nums)
    {
      //做一些操作......
        return View();
    }

\n问题是当我使用ajax发送数组时,控制器动作中的nums参数是null,而且服务器还给我返回了以下错误:\n

\nPOST http://localhost:18322/BarberShop/ServiceUpdate 500 (Internal Server Error)\nn.ajaxTransport.k.cors.a.crossDomain.send @ jquery-2.1.4.min.js:4n.extend.ajax @ jquery-2.1.4.min.js:4(anonymous function) @ Barbershop:481n.event.dispatch @ jquery-2.1.4.min.js:3n.event.add.r.handle @ jquery-2.1.4.min.js:3\n

\n我尝试过这些链接中的所有答案以及其他一些答案:\n500-internal-server-error-on-jquery-ajax-post-asp-net-mvc\npass-array-to-ajax-request-in-ajax\n但仍然存在问题。谢谢。

0
0 Comments

问题的原因是在Javascript端使用了一个数组,而在控制器端期望的是一个字符串。解决方法是将控制器端的参数改为List nums,并在ajax选项中设置traditional为true。这是因为在参数绑定时,后端参数绑定器会寻找相似类型/结构的参数进行绑定,所以无法将Javascript的Array绑定到C#的字符串。

具体代码如下:

Javascript端代码:

var nums=["21", "22", "23", "20", "19", "18"];
$.ajax({
    url: "/BarberShop/ServiceUpdate",
    type: "Post",
    data:{ nums: nums},
    dataType: "json",
    success: function (data) {
    },
    traditional: true
});

控制器端代码:

public ActionResult ServiceUpdate(List nums)
{
    // 处理逻辑
}

参考链接:[How can I post an array of string to ASP.NET MVC Controller without a form?](https://stackoverflow.com/questions/309115)

0