如何从jQuery $ .ajax()将多个参数传递给MVC控制器?

时间:2011-05-15 21:17:56

标签: asp.net-mvc-3 jquery

这就是我在构建数据时所做的:

for (var i = args.length; i < args.length; i += 2) {
    if (args.length != 0) args += ','; 
    args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"';
}

这就是我打电话的方式:

$.ajax({
        type: "GET",
        url: "/blog/GetPosts",
        //data: "{" + args + "}",                    <- gives 500 in 1.6 but works in 1.3
        data: "app=blog&id=100&page=2&pagesize=10",  <- this works
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {},
        error: function (xhr, status, error) {}
});

如何使用多个参数构建数据并传递给控制器​​? 我需要循环和构建数据,因为我有可变长度的参数。

请注意,这有效: 数据:“app = blog&amp; id = 100&amp; page = 2&amp; pagesize = 10”

但是我可以在数据本身中使用&amp; abc =某些东西作为另一个参数。

感谢您阅读

5 个答案:

答案 0 :(得分:2)

您无需将查询字符串传递给数据。如果要传递多个值,则应传入一个对象。

$.ajax({
        type: "GET",
        url: "/blog/GetPosts",
        data: {
            app: 'blog',
            id: 100,
            page: 2
            pagesize: 10
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {},
        error: function (xhr, status, error) {}
});

jQuery将为您处理URL编码。

答案 1 :(得分:2)

不要创建对象的字符串表示,而是创建对象。此外,你的循环是错误的,所以它不会正确地从数组中获取值。

var data = {};
for (var i = 0; i < arguments.length; i += 2) {
  data[arguments[i]] = arguments[i + 1];
}

现在在调用中使用变量:

$.ajax({
  type: "GET",
  url: "/blog/GetPosts",
  data: data,
  ...

答案 2 :(得分:1)

data: JSON.stringify(someObject)

将键/值数据存储在对象中,然后将字符串化版本传递给data

答案 3 :(得分:0)

听起来您需要使用encodeURIComponent对具有特殊字符的参数值进行编码,例如&+=。您可能还想查看escape(), encodeURI() and encodeURIComponent()之间的比较。

或者,您可以使用$.serialize()

答案 4 :(得分:0)

data: "app=blog&id=100&page=2&pagesize=10"有效且//data: "{" + args + "}"没有效果 因为您使用“GET”作为请求类型。要向您发送数据需要“POST”类型的请求,GET请求只能发送params和url。