3

我正在使用 jquery 通过 ajax 发布数据,并且在 chrome 工具中它显示正在发送的数据,如下所示:

PermssionArray[0][Permitted]:false
PermssionArray[0][Id]:2
PermssionArray[1][Permitted]:true
PermssionArray[1][Id]:3
PermssionArray[2][Permitted]:true
PermssionArray[2][Id]:4

我的控制器是这样的:

  public ActionResult UpdatePermissions(PermSet[] PermssionArray)

我的 PermSet 类是这样的:

  public class PermSet
        {
            public int Id { get; set; }
            public bool Permitted { get; set; }
        }

如果我在控制器中断点,则 PermssionArray 数组中有 3 项,但值都是 id = 0,允许 = false。

我需要改变什么来解决这个问题?

4

1 回答 1

5

列表在 ASP.Net MVC 中确实很奇怪,您可以选择将数据发送到服务器。

  1. 使用 ASP.NET MVC 中的默认模型绑定。这需要您更改模型以使用特定格式回发。查看 Phil Haack 关于此的帖子。这可行,但如果您有很多列表,可能会变得很麻烦。 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

  2. 第二种选择是使用 jQuery 绕过您的帖子并将您的表单序列化为 JSON 文档,然后将其发布到服务器。选项 2 更容易,但需要您处理 ajax 请求而不是直接 POST / Redirect 操作。

    • 使用 JSON.stringify(model)
    • 返回一个响应,其中包括在成功时重定向到的下一页
    • 返回包含任何错误消息的响应

我假设你知道如何使用 jQuery 和 $.ajax 方法。

当页面的复杂性开始变大时,我开始更倾向于选项二。唯一的缺点是你需要一个非常好的客户故事。考虑使用 knockout.js,因为它可以让您使用 ko.toJSON 将表单转换为 JSON。

如果您希望我详细介绍任何事情,请告诉我。

于 2013-07-22T13:32:10.757 回答