代码之家  ›  专栏  ›  技术社区  ›  Jason

将数组从$.Post传递到操作

  •  2
  • Jason  · 技术社区  · 15 年前

    我无法通过一个$.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});
    }
    

    操作将privilegieds视为空。有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    你需要设置 jQuery.ajaxSettings.traditional = true; 用于jquery ajax设置。在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
  •  1
  •   Fosco    15 年前

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

    告诉我这是否有帮助。

        3
  •  0
  •   Jason    15 年前

    这就是我最后所做的。可能对某人有帮助…

    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