[英]Issue With Custom Collection Model Binder in MVC 3
我在MVC中建立模型資料夾時遇到問題。
我要定位的操作如下所示:
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}};
}
}
更新:
這是DefaultModelBinder.
的問題DefaultModelBinder.
調用CreateModel
之后,另一個內部方法UpdateCollection
被調用,該方法有效地使CreateModel.
創建的集合無效CreateModel.
解決方案是推出我自己的IModelBinder.
實現IModelBinder.
唯一缺少的唯一參數IModelBinder.BindModel
是modelType,
這是很容易得到:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var type = bindingContext.ModelType;
//...
}
這是DefaultModelBinder.
的問題DefaultModelBinder.
調用CreateModel
之后,另一個內部方法UpdateCollection
被調用,該方法有效地使CreateModel.
創建的集合無效CreateModel.
解決方案是推出我自己的IModelBinder.
實現IModelBinder.
唯一缺少的唯一參數IModelBinder.BindModel
是modelType,
這是很容易得到:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var type = bindingContext.ModelType;
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.