0

我将以下请求发布到 asp.net-MVC3 应用程序:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:240
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With:XMLHttpRequest
...
EntityName=Package&Columns[0].Id="Ordering"&Columns[0].Hidden=false&Columns[0].Width="250px"&Columns[1].Id="SubItemId"&Columns[1].Hidden=true&Columns[1].Width="250px"&

以下操作方法应该绑定到上一个请求的表单数据:

public ActionResult Scene(GridScene scene) 
{
...
}

其中 GridScene 对象由以下两个属性组成:

public class GridScene
{
    public string EntityName { get; set; }
    public GridColumns[] Columns { get; set; }
}

和 GridColumns 对象由以下三个属性组成:

public class GridColumns
{
    public string Id { get; set; }
    public bool Hidden { get; set; }
    public string Width { get; set; }
}

第一个属性 (EntityName) 已正确绑定,但 GridColumns[] 始终为空。谁能帮我把它绑定?

PS:类似的问题 绑定到具有属性和列表的对象

4

2 回答 2

0

我刚刚在我的 mvc3 应用程序上尝试了你的代码,它运行良好。我做了一个这样的请求:

场景?

EntityName=Package&Columns[0].Id="Ordering"&Columns[0].Hidden=false&Columns[0].Width="250px"&Columns[1].Id="SubItemId"&Columns[1].Hidden=true&Columns[1] .Width="250px"

您使用的是默认模型绑定器吗?您应该始终从零索引开始,否则默认模型绑定器不会填充您的数组。

于 2013-08-16T13:55:15.733 回答
0

解决了 !!问题与数据编码有关。我使用 JQuery 发布功能发布该请求。

以下重载正常工作:

var data = 'EntityName=Package&Columns[0].Id="Ordering"&Columns[0].Hidden=false&Columns[0].Width="250px"&Columns[1].Id="SubItemId"&Columns[1].Hidden=true&Columns[1].Width="250px"&'
$.post("home/index", data); 

但是这个:

$.post("home/index", { scene: data });

正在发送一个 URI 编码的数据,类似于:

 ...Columns%5B0%5D.Id%3DUomId%26Columns%5B0%5D.hidden%3Dfalse%26Columns%5B0%5D.width%3D250px%26Columns%5B1%5D.Id%3DOrdering%26Columns%5B1%5D.hidden%3Dfalse%26Columns%5B1%5D.width%3D250px%26

我认为这混淆了模型活页夹。

我正在使用第二个重载,但我没有注意到 URI 编码的数据,因为 Chrome 开发人员工具默认解码数据。但是使用提琴手我设法找到了每个重载发送的数据之间的差异。

希望这可以帮助某人。谢谢,

于 2013-08-18T07:52:12.770 回答