-
Notifications
You must be signed in to change notification settings - Fork 1
Binding filter values
Рассмотрим еще один вопрос, касающийся FilterOptions. А именно, каким образом в его экземпляр попадают данные из запроса, полученного от формы на странице сайта. Кроме того, разберем решение одной интересной задачи, периодически встречающейся в реальных проектах.
Рассмотрим класс
namespace Sprint.Filter
{
using System.Collections.Generic;
public interface IFilterOptions
{
long LoadFilterId { get; set; }
IDictionary<string, IFilterValue> Filters { get; }
FilterType FilterType { get; }
}
}
Совойтво Filters
имеет тип IDictionary<string, IFilterValue>
, стандартный DefaultModelBinder
не может связывать параметры формы с интерфесом, для решения данной задачи был создан [FilterValueModelBinder](https://github.com/artem-sedykh/Sprint.Filter/blob/master/Mvc/FilterValueModelBinder.cs)
.
FilterValueModelBinder
, анализирует ключ TypeName, и создаёт метаданные для типа FilterValue<TModel>, если в TypeName
находится название ссылочного или Nullable типа, или FilterValue<TModel?> если значимого типа.