Выполнение пользовательского связывания для определенного типа данных в ModelBinder

Я нахожусь в процессе создания моего собственного ModelBinder, который наследуется от DefaultModelBinder и вручную связывает свойства, типизированные XElement.

Теперь кажется, что я должен переопределить метод BindProperty, например, так:

    protected override void BindProperty(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext, 
        System.ComponentModel.PropertyDescriptor propertyDescriptor)
    {
        if (propertyDescriptor.PropertyType == typeof(XElement))
        {
            // code here to take the POST-ed form value and put it in the property as an XElement instance
        }
        else
            base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }

Какой код я должен использовать для:

А) получить значение свойства из опубликованных значений формы?

Б) ввести это значение в собственность?

Я попытался запустить Reflector в классе DefaultModelBinder, чтобы увидеть, как он это делает, но код был очень запутанным.

Мне нужен кто-то, кто делал это прежде, чтобы провести меня через это.

1 ответ

Решение

Параметр bindingContext содержит свойство ValueProvider, которое уже заполнено значениями из запроса. Идея в том, что вы извлекаете из этого ценности.

Это просто словарь значений, поэтому вы можете индексировать его, используя имя поля, которое вы хотите связать.

Самый простой способ понять, что происходит, - применить свой собственный ModelBinder, а затем установить точку останова в своем коде и проверить, какие данные вы получили, находясь в отладчике.

Другие вопросы по тегам