0

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

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; }
}

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

4

2 回答 2

1

我需要使用默认的 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

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

于 2012-12-12T12:08:33.573 回答
0

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

编辑可变长度列表

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

如果您删除和添加过滤器,它也会对您有所帮助......因为索引将在 secuence 中出现“漏洞”(默认模型绑定器不支持)......并且这种方法在这方面更健壮不是依靠整数secuence。

于 2012-12-12T12:11:32.150 回答