[英]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.