2012-05-10 198 views
1

我在創建MVC模型綁定器時遇到問題。MVC中的自定義集合模型綁定器問題3

是我針對看似行動:

public ActionResult GetAccounts (ICollection<Account> accounts){} 

我創建了一個自定義模型粘合劑和用下面的代碼註冊它:

ModelBinders.Binders.Add(typeof(ICollection<Account>),new CollectionModelBinder()); 

附帶一個調試器,我可以看到CollectionModelBinder's CreateModel方法正在被調用。但是,當執行到達控制器的操作方法時,accounts參數爲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,這很容易Ø獲得:

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; 
    //... 
}