从$ .post传递数组到Action

我无法通过$ .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。 有任何想法吗?

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

请参阅:

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

而且: 如何在没有表单的情况下将一个字符串数组发布到ASP.NET MVC Controller?

我使用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。

如果这有或没有帮助,请告诉我。

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

 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