【问题标题】:Passing Array to Action from a $.post从 $.post 将数组传递给 Action
【发布时间】:2010-10-26 15:42:07
【问题描述】:

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

【问题讨论】:

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


    【解决方案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】:

      我使用 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 的内置函数和 3rd 方函数。

      让我知道这是否有帮助。

      【讨论】:

        【解决方案3】:

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

        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

        【讨论】:

          猜你喜欢
          • 2021-04-14
          • 2011-07-26
          • 1970-01-01
          • 2018-07-25
          • 2012-04-18
          • 1970-01-01
          • 2011-02-27
          • 2014-09-09
          • 1970-01-01
          相关资源
          最近更新 更多