MVC控制器,将参数作为类

时间:2013-07-22 08:47:16

标签: c# asp.net-mvc html-form

我正在使用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,allowed = false。

我需要更改以解决此问题?

1 个答案:

答案 0 :(得分: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)
    • 返回包含下一页重定向到成功的响应
    • 返回包含任何错误消息的回复
  3. 我假设你知道如何使用jQuery和$ .ajax方法。

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

    如果您希望我详细介绍任何内容,请与我们联系。