У меня возникла проблема создания связующего объекта в MVC.Проблема с пользовательской коллекцией Model Binder в MVC 3
Действие, которое я нацеливание выглядит как:
public ActionResult GetAccounts (ICollection<Account> accounts){}
Я создал пользовательские модели связующего и зарегистрировали его со следующим кодом:
ModelBinders.Binders.Add(typeof(ICollection<Account>),new CollectionModelBinder());
С помощью отладчика прилагается, я могу видеть что вызывается метод CollectionModelBinder's CreateModel
. Однако, когда выполнение достигает метода действия контроллера, параметр учетных записей имеет значение null.
В чем проблема?
Моя модель связующий выглядит следующим образом:
public class CollectionModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
return new List<Account> {
new Account {Id = 1},
new Account {Id = 2},
new Account {Id = 3}};
}
}
UPDATE:
Это была проблема с DefaultModelBinder.
После CreateModel
был назван еще один внутренний метод, UpdateCollection
был назван, который фактически обнулены из коллекции который был создан CreateModel.
. Решением было свернуть мою собственную реализацию IModelBinder.
. Единственный аргумент, отсутствующий в IModelBinder.BindModel
, - это modelType,
, который легко t О получите:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var type = bindingContext.ModelType;
//...
}