我从事一个 ASP.NET MVC 项目,该项目需要能够以可扩展的方式过滤数据。我决定使用一个类来表示单个过滤条件(我知道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),并返回一个 JSON,其中包含一组实体,然后将显示在页面上。
我假设我需要某种转换器来接受原始状态的参数并创建和实现可枚举的对象IEnumerable<FilterCriterion>
。也许我可以使用 a ModelBinder
,但我不确定如何使用。
你能把我推向正确的方向吗?谢谢。
编辑:我没有按照建议传递数组。当我进入控制器时,里面有正确数量的项目filters
,但它们的属性(FilterName 和 FilterValue)都是 null。下面我发布完整的代码以及客户端过滤器对象的内容。我究竟做错了什么?Javascript代码:
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 Immediate Window):
?filters
[[object Object],[object Object]]
[0]: {...}
[1]: {...}
[prototype]: []
?filters[0]
{...}
[prototype]: {...}
FilterName: "Genre"
FilterValue: "Animation"