从$ .post传递数组到Action

时间:2010-10-26 15:42:08

标签: c# javascript jquery asp.net-mvc

我无法通过$ .post传递数组。

Javascript

var privIDs = [1,2,4,5];
$.post("/Home/GrantPrivilegesToUser", { privilegeIDs: privIDs }, function (data) {
     alert("Data Loaded: " + data.success);
});  

行动

public ActionResult GrantPrivilegesToUser(int[] privilegeIDs)       
{
    return Json(new {success=true});
}

该操作将privilegeID视为null。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我使用JSON使用JSON2库将数据作为字符串传递:http://www.json.org/js.html

var privIDs = [1,2,3,4,5];
var data = JSON.stringify({privilegeIDs : privIDs});
$.POST("/Home/GrantPrivilegesToUser", data, function (data) {
   alert("Data Loaded: " + data.success);
});

该操作将使用WebMethod类型:

[WebMethod]
public object Entry_GetFormOptions(string privilegeIDs)
{
   return new {success=true};
}

内置和第三方函数都可以解析收到的JSON以访问权限ID。

如果这有用或无效,请告诉我。

答案 1 :(得分:1)

您需要为jQuery ajax设置jQuery.ajaxSettings.traditional = true;。在jQuery 1.4中,他们改变了在表单中序列化项目的方式。

请参阅:

http://forum.jquery.com/topic/nested-param-serialization

和: How can I post an array of string to ASP.NET MVC Controller without a form?

答案 2 :(得分:0)

这就是我最终要做的事情。可能对某人有帮助......

var privIDs = [1,2,4,5];

$.ajax({
     type: "POST",
     url: "/Home/UpdatePrivileges",
     data: { privilegeIDs: privIDs },
     traditional: true,
     success: function (json) {
          alert(json.success);
     }
});

如果使用.ajax而不是.post,则可以包含traditional: true