私は、拡張可能な方法でデータをフィルタリングできる必要があるASP.NETMVCプロジェクトに取り組んでいます。単一のフィルター基準を表すためにクラスを使用することにしました(Dictionary
この時点でそれが可能である可能性があることは承知していますが、後で他のプロパティを追加する必要があるかもしれません):
public class FilterCriterion
{
public string FilterName { get; set; }
public string FilterValue { get; set; }
}
そして、これは私が念頭に置いていたコントローラーメソッドのシグネチャであり、フィルター処理されたデータを返します。
public JsonResult GetMultipleShowDetailsByFilter(IEnumerable<FilterCriterion> filters, int pageNumber, int itemsPerPage)
このメソッドは(JavaScriptを使用して)Webページから呼び出され、ページに表示されるエンティティのセットを含むJSONを返します。
生の状態で引数を受け入れ、を実装する列挙可能なオブジェクトを作成する、ある種のコンバーターが必要になると思いますIEnumerable<FilterCriterion>
。を使用できるかもしれModelBinder
ませんが、方法がよくわかりません。
私を正しい方向に動かしてくれませんか?ありがとう。
編集:私は提案されたように配列を渡しません。コントローラにステップインすると、内部に正しい数のアイテムがありますfilters
が、それらのプロパティ(FilterNameとFilterValueの両方)はnullです。以下に、完全なコードとフィルターオブジェクトの内容をクライアント側に投稿します。私は何が間違っているのですか?Javscriptコード:
function filterChanged() {
var activeFilters = $(':checked');
var filters = new Array();
$.each(activeFilters, function (i, val) {
var newItem = new Object();
newItem.FilterName = $(val).attr('data-filter-type');
newItem.FilterValue = $(val).attr('data-filter-value');
filters[i] = newItem;
});
$.getJSON('../DatabaseApi/GetMultipleShowDetailsByFilter',
{
'filters': filters,
'pageNumber': 1,
'itemsPerPage': 10
},
function(data) {
fill(data);
});
}
作成されたオブジェクトはどのように見えますか(VSイミディエイトウィンドウから取得されたデータがあることの証明):
?filters
[[object Object],[object Object]]
[0]: {...}
[1]: {...}
[prototype]: []
?filters[0]
{...}
[prototype]: {...}
FilterName: "Genre"
FilterValue: "Animation"