我在MVC中创建模型绑定器时遇到问题。
我定位的操作如下:
public ActionResult GetAccounts (ICollection<Account> accounts ){}
我创建了一个自定义模型绑定器,并使用以下代码注册它:
ModelBinders.Binders.Add(typeof(ICollection<Account>),new CollectionModelBinder());
附加调试器后,我可以看到正在调用CollectionModelBinder's CreateModel
方法。但是,当执行到达控制器的action方法时,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.
的一个问题调用CreateModel
之后,调用了另一个内部方法UpdateCollection
,它有效地清除了由CreateModel.
创建的集合。解决方案是推出我自己的IModelBinder.
实现IModelBinder.BindModel
上唯一缺少的modelType,
参数很容易获得:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var type = bindingContext.ModelType;
//...
}
答案 0 :(得分:1)
这是DefaultModelBinder.
的一个问题调用CreateModel
之后,调用了另一个内部方法UpdateCollection
,它有效地清除了由CreateModel.
创建的集合。解决方案是推出我自己的IModelBinder.
实现IModelBinder.BindModel
上唯一缺少的modelType,
参数很容易获得:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var type = bindingContext.ModelType;
//...
}