Выполнение пользовательского связывания для определенного типа данных в ModelBinder - PullRequest
2 голосов
/ 07 октября 2009

Я нахожусь в процессе создания собственного пользовательского 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);
    }

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

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

B) ввести это значение в свойство?

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

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

1 Ответ

3 голосов
/ 07 октября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...