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