2012-05-10 1 views
1

У меня возникла проблема создания связующего объекта в 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; 
    //... 
} 

ответ

1

Это была проблема с DefaultModelBinder. После CreateModel называли еще один внутренний метод, UpdateCollection был назван, который фактически обнулены из коллекции, которая была создана CreateModel. Решение было свернуть свою собственную реализацию IModelBinder. Единственный аргумент, отсутствующий на IModelBinder.BindModel, - modelType,, который легко получить:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    var type = bindingContext.ModelType; 
    //... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^