繁体   English   中英

MVC 3中的自定义集合模型活页夹的问题

[英]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.BindModelmodelType,这是很容易得到:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    var type = bindingContext.ModelType;
    //...
}

这是DefaultModelBinder.的问题DefaultModelBinder. 调用CreateModel之后,另一个内部方法UpdateCollection被调用,该方法有效地使CreateModel.创建的集合无效CreateModel. 解决方案是推出我自己的IModelBinder.实现IModelBinder. 唯一缺少的唯一参数IModelBinder.BindModelmodelType,这是很容易得到:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    var type = bindingContext.ModelType;
    //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM