Asp.net mvc 4 ASP.NET MVC4-数据表的复杂模型绑定

Asp.net mvc 4 ASP.NET MVC4-数据表的复杂模型绑定,asp.net-mvc-4,datatables,model-binding,Asp.net Mvc 4,Datatables,Model Binding,我有一个复杂的模型,应该反序列化DataTables请求,它不仅包含嵌套对象,还包含列表中的嵌套对象。datatablerequest模型定义如下: 公共类DataTablesRequest { 公共阶级秩序 { 公共int列{get;set;} 公共字符串dir{get;set;} } 公共类搜索 { 公共字符串值{get;set;} 公共布尔正则表达式{get;set;} } 公共类专栏 { 公共字符串名称{get;set;} 公共布尔可搜索{get;set;} 公共布尔可排序对象{get;

我有一个复杂的模型,应该反序列化DataTables请求,它不仅包含嵌套对象,还包含列表中的嵌套对象。
datatablerequest
模型定义如下:

公共类DataTablesRequest
{
公共阶级秩序
{
公共int列{get;set;}
公共字符串dir{get;set;}
}
公共类搜索
{
公共字符串值{get;set;}
公共布尔正则表达式{get;set;}
}
公共类专栏
{
公共字符串名称{get;set;}
公共布尔可搜索{get;set;}
公共布尔可排序对象{get;set;}
公共搜索{get;set;}
}
public int start{get;set;}
公共整数长度{get;set;}
公共int draw{get;set;}
公共IList列{get;set;}
公共IList顺序{get;set;}
}
控制器方法签名是
ActionResult列表(datatablerequest请求)
。我检查了正在发送的查询参数DataTables是否正确,但是模型绑定器拒绝绑定最里面的对象。它使用正确数量的对象(十个用于列,一个用于顺序)正确地分配数组,但是列表中的对象是默认构造的,没有绑定值

为了完整起见,下面是DataTables发出的实际请求:

draw:1
columns[0][data]:FirstName
columns[0][name]:FirstName
columns[0][searchable]:true
columns[0][orderable]:true
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:LastName
columns[1][name]:LastName
columns[1][searchable]:true
columns[1][orderable]:true
columns[1][search][value]:
columns[1][search][regex]:false
columns[2][data]:Title
columns[2][name]:Title
columns[2][searchable]:true
columns[2][orderable]:true
columns[2][search][value]:
columns[2][search][regex]:false
columns[3][data]:Email
columns[3][name]:Email
columns[3][searchable]:true
columns[3][orderable]:true
columns[3][search][value]:
columns[3][search][regex]:false
columns[4][data]:Organization
columns[4][name]:Organization
columns[4][searchable]:true
columns[4][orderable]:true
columns[4][search][value]:
columns[4][search][regex]:false
columns[5][data]:StateAcronym
columns[5][name]:StateAcronym
columns[5][searchable]:true
columns[5][orderable]:true
columns[5][search][value]:
columns[5][search][regex]:false
columns[6][data]:DateAdded
columns[6][name]:DateAdded
columns[6][searchable]:true
columns[6][orderable]:true
columns[6][search][value]:
columns[6][search][regex]:false
columns[7][data]:DateRemoved
columns[7][name]:DateRemoved
columns[7][searchable]:true
columns[7][orderable]:true
columns[7][search][value]:
columns[7][search][regex]:false
columns[8][data]:ExternalReference
columns[8][name]:ExternalReference
columns[8][searchable]:true
columns[8][orderable]:true
columns[8][search][value]:
columns[8][search][regex]:false
columns[9][data]:9
columns[9][name]:
columns[9][searchable]:false
columns[9][orderable]:false
columns[9][search][value]:
columns[9][search][regex]:false
order[0][column]:0
order[0][dir]:asc
start:0
length:10
search[value]:
search[regex]:false
有人知道为什么这不起作用吗


EDIT:我刚刚意识到问题在于序列化数据的格式是
column[I][attribute]
而不是
column[I].attribute
。当使用
字典
而不是专用模型时,它会正确序列化,但是我会丢失所有类型信息。我仍然希望使用实际的模型来实现这一点,因此我想我的选择要么是找到一种方法让模型绑定器为我实现这一点(或者编写一个自定义绑定器),要么是改变数据在客户端序列化的方式

已解决。
显然,模型绑定器将
foo.bar.baz
等参数绑定到嵌套对象,而
foo[bar][baz]
只能绑定到字典。jQuery使用后一种方法将对象序列化为查询字符串,生成只能绑定到嵌套字典的查询字符串

我猴子补丁jQuery允许可选点参数序列化,源代码可以找到。如果其他人需要此功能,我可能会编写一些测试并向jquerycore提交一个pull请求