1

我在 MVC 中创建模型绑定器时遇到问题。

我所针对的操作如下所示:

public ActionResult GetAccounts (ICollection<Account> accounts ){}

我创建了一个自定义模型绑定器并使用以下代码注册它:

ModelBinders.Binders.Add(typeof(ICollection<Account>),new CollectionModelBinder());

附加调试器后,我可以看到CollectionModelBinder's CreateModel正在调用该方法。但是,当执行到达控制器的 action 方法时,accounts 参数为空。

有什么问题?

我的模型活页夹看起来像:

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. AfterCreateModel被调用的问题,另一个内部方法UpdateCollection被调用,它有效地取消了由创建的集合CreateModel.解决方案是推出我自己的实现IModelBinder. 唯一缺少的参数IModelBinder.BindModelmodelType,容易获得的:

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

1 回答 1

1

这是DefaultModelBinder. AfterCreateModel被调用的问题,另一个内部方法UpdateCollection被调用,它有效地取消了由创建的集合CreateModel.解决方案是推出我自己的实现IModelBinder. 唯一缺少的参数IModelBinder.BindModelmodelType,容易获得的:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    var type = bindingContext.ModelType;
    //...
}
于 2012-05-11T14:36:25.723 回答