我在創建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;
//...
}