Я реализую пользовательский ModelBinder
, где я пытаюсь установить свойство с PropertyDescriptor.SetValue, и я не могу понять, почему он не работает.PropertyDescriptor.SetValue не работает в ModelBinder
Для некоторых сложных свойств значение не задается, но оно не вызывает исключения. Имущество по-прежнему null
, но для некоторых он это делает.
Если я получаю PropertyInfo и звоню SetValue, он работает отлично каждый раз.
Mvc source from codeplex использует propertyDescriptor.SetValue(bindingContext.Model, value);
внутренне, поэтому я предполагаю, что это лучший способ пойти?
public class MyCustomBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(bindingContext.Model))
{
object value = property.GetValue(bindingContext.Model);
// Perform custom bindings
// Call SetValue on PropertyDescriptor (Works sometimes)
property.SetValue(bindingContext.Model, value);
Debug.Assert(property.GetValue(bindingContext.Model) == value, "Value not set");
// Get PropertyInfo and call SetValue (Working)
bindingContext.ModelType.GetProperty(property.Name).SetValue(bindingContext.Model, value, null);
Debug.Assert(property.GetValue(bindingContext.Model) == value, "Value not set");
}
return bindingContext.Model;
}
}
Примечание 1: Объекты им Размышляя сопоставляется с NHibernate поэтому я заподозрить там может быть что-то с прокси.
Примечание 2: Он не работает с DefaultModelBinder, но объекты воссозданы, поэтому опубликованные данные в порядке.