Skip to content

Binding filter values

Artem Sedykh edited this page Jul 5, 2013 · 12 revisions

Рассмотрим еще один вопрос, касающийся 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?> если значимого типа.

Clone this wiki locally