jquery - 如何使用 jQuery 将 int 列表发送到 ASP.net MVC 默认模型绑定(bind)器

标签 jquery asp.net-mvc-3 defaultmodelbinder

当我像这样使用 jQuery 发送 int 列表时:

$.ajax('@Url.Action("Execute")', {
    type: 'POST',
    data: {
        pkList: [1,2,3]
    }
});

然后 jQuery 将转换 pkList 对象并通过 post 发送它,如下所示:

pkList[]:1
pkList[]:2
pkList[]:3

如果服务器是 PHP,但我使用 Asp.NET MVC3 并尝试使用默认模型绑定(bind)器获取这些值,那就没问题了:

public ActionResult Execute(ICollection<int> pkList)

但是pkList始终为null,看来默认的模型绑定(bind)器无法绑定(bind)它。

如何正确解决这个问题?

<小时/>

添加 解决方案

我使用了 Darin Dimitrov 的解决方案,在 jQuery 中设置了traditional 选项:

$.ajax('@Url.Action("Execute")', {
    type: 'POST',
    traditional: true,
    data: {
        pkList: [1,2,3]
    }
});

现在 jQuery 不再将 [] 添加到参数中,它们的发送方式如下:

pkList:1
pkList:2
pkList:3

MVC 默认模型绑定(bind)器正确获取值。

希望这对某人有帮助。

最佳答案

您可以使用 JSON 请求,因为它允许您发送您想要的任何复杂对象:

$.ajax({
    url: '@Url.Action("Execute")',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ pkList: [1, 2, 3] }), // you could throw any javascript object you like here
    success: function(result) {
        // process the results
    }
});

JSON.stringify 方法是在现代浏览器中内置的,如果您想支持旧版浏览器,您可以包含 json2.js脚本到您的网站。

要回答您的问题,您可以使用设置 traditional: true 选项来指示 jQuery 回退到传统参数序列化,因为这在 jQuery 1.4 中已发生变化,并且如果您使用的是更高版本,您可以切换回参数序列化的方式:

$.ajax({ 
    url: '@Url.Action("Execute")',
    type: 'POST',
    data: {
        pkList: [1, 2, 3]
    },
    traditional: true
});

关于jquery - 如何使用 jQuery 将 int 列表发送到 ASP.net MVC 默认模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931832/

相关文章:

asp.net-mvc-3 - 默认模型绑定(bind)器不绑定(bind)到字段是否有原因?

asp.net-mvc - MVC3 非顺序隐藏输入索引需要先出现吗?

javascript - 添加类时的过渡

javascript - 如何将变量传递给 jQuery 函数?

javascript - 多个下拉按钮——一次只打开一个(JS/jQuery)

javascript - 没有预期效果的数字总和jquery

c# - ASP.NET Massive - 如何创建数据库以显示 VIEW

ajax - ASP.NET MVC JSON 对象可以通过带有动态类型参数的参数传递给 Controller ​​吗?

asp.net-mvc-3 - 如何发布部分 View 数据?

c# - 派生抽象类 asp.net mvc 的 JSON 自定义 Binder null