Выполнение пользовательского связывания для определенного типа данных в 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, а затем установить точку останова в своем коде и проверить, какие данные вы получили, находясь в отладчике.