【发布时间】:2017-12-27 14:32:44
【问题描述】:
我正在构建一个简单的搜索、排序、页面功能。我附上了下面的代码。 以下是用例:
我的目标是通过每个请求传递“当前过滤器”以保持它们,特别是在排序和分页时。
与其用许多(如果不是太多)参数污染我的操作方法,我正在考虑使用一个包含当前过滤器的泛型类型参数。
我需要一个能够实现此目的的自定义模型绑定器。
有人可以发布一个示例实现吗?
PS:我也在探索替代方案,而不是来回传递复杂的对象。但是我需要将这条路线作为最后的手段,而且我找不到自定义模型绑定泛型类型参数的好例子。任何指向此类示例的指针也可以提供帮助。谢谢!
public async Task<IActionResult> Index(SearchSortPage<ProductSearchParamsVm> currentFilters, string sortField, int? page)
{
var currentSort = currentFilters.Sort;
// pass the current sort and sortField to determine the new sort & direction
currentFilters.Sort = SortUtility.DetermineSortAndDirection(sortField, currentSort);
currentFilters.Page = page ?? 1;
ViewData["CurrentFilters"] = currentFilters;
var bm = await ProductsProcessor.GetPaginatedAsync(currentFilters);
var vm = AutoMapper.Map<PaginatedResult<ProductBm>, PaginatedResult<ProductVm>>(bm);
return View(vm);
}
public class SearchSortPage<T> where T : class
{
public T Search { get; set; }
public Sort Sort { get; set; }
public Nullable<int> Page { get; set; }
}
public class Sort
{
public string Field { get; set; }
public string Direction { get; set; }
}
public class ProductSearchParamsVm
{
public string ProductTitle { get; set; }
public string ProductCategory { get; set; }
public Nullable<DateTime> DateSent { get; set; }
}
【问题讨论】:
标签: asp.net-mvc asp.net-core custom-model-binder actionmethod generic-type-argument