0

デフォルトのASP.NETMVCモデルバインダーを使用して、次のフォームデータから解析するサーバーモデルを構築する必要があります。

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

それは問題pageありpageSizeませんが、フィルターに対して同じことを行うことはできません。次のことを試しました。

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はnullではありませんが、ネストされたデータはありません。

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

フィルターのリストを処理するには、このアプローチを使用することをお勧めします。

可変長リストの編集

これは、モデル バインダーが理解できる形式に従ってサーバーに投稿されます。

フィルターを削除して追加する場合にも役立ちます...インデックスはセキュリティの「穴」で構成されるため(これはデフォルトのモデルバインダーではサポートされていません)...そして、このアプローチはその面でより堅牢です。整数のセキュリティに依存しています。

于 2012-12-12T12:11:32.150 に答える