复杂表格数据的模型

时间:2012-12-12 11:38:27

标签: asp.net-mvc asp.net-mvc-4

我需要构建服务器模型,使用默认的ASP.NET MVC模型绑定器从folowwing表单数据中解析:

page:1
pageSize:10
filter[filters][0][field]:ApplicantName
filter[filters][0][operator]:eq
filter[filters][0][value]:e
filter[filters][1][field]:ApplicantName
filter[filters][1][operator]:eq
filter[filters][1][value]:d
filter[filters][2][field]:FamilySize
filter[filters][2][operator]:eq
filter[filters][2][value]:2
filter[filters][3][logic]:or
filter[filters][3][filters][0][field]:WaitList
filter[filters][3][filters][0][operator]:eq
filter[filters][3][filters][0][value]:3
filter[filters][3][filters][1][field]:WaitList
filter[filters][3][filters][1][operator]:doesnotcontain
filter[filters][3][filters][1][value]:3

pagepageSize没关系但是对于过滤器不能这样做。尝试以下方法:

public class DataSourceRequest
{
    public int Page { get; set; }
    public int PageSize { get; set; }
    public DataSourceFilter Filter { get; set; }
}

public class DataSourceFilter
{
    public IEnumerable<DataSourceFilter> Filters { get; set; }
    public string Logic { get; set; }
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

但没有成功。根Filter不为空,但没有任何嵌套数据。

2 个答案:

答案 0 :(得分:1)

  

我需要构建要从folowwing表单数据中解析的服务器模型   使用默认的ASP.NET MVC模型绑定器:

你做不到。默认模型绑定器不理解也不支持此语法。请阅读following article以更好地了解默认模型绑定器使用的支持的有线格式。

然后修复您的请求以符合预期的格式:

page                                   1
pageSize                               10
filter.filters[0].field                ApplicantName
filter.filters[0].operator             eq
filter.filters[0].value                e
filter.filters[1].field                ApplicantName
filter.filters[1].operator             eq
filter.filters[1].value                d
filter.filters[2].field                FamilySize
filter.filters[2].operator             eq
filter.filters[2].value                2
filter.filters[3].logic                or
filter.filters[3].filters[0].field     WaitList
filter.filters[3].filters[0].operator  eq
filter.filters[3].filters[0].value     3
filter.filters[3].filters[1].field     WaitList
filter.filters[3].filters[1].operator  doesnotcontain
filter.filters[3].filters[1].value     3

如果由于某种原因您无法修改请求格式,则必须编写自定义模型绑定器并手动解析值。

答案 1 :(得分:0)

我建议使用这种方法来处理过滤器列表:

Editing variable length list

这将按照模型绑定器可理解的格式发布到服务器。

如果您删除并添加过滤器,它也会对您有所帮助......因为索引将成为&#34; hole&#34;在secuence中(默认模型绑定器不支持)...并且这种方法在不依赖于整数安全性的方面更加健壮。