多态自定义模型绑定器不填充模型w/值



我有一个自定义模型绑定器,我使用它来基于包含原始类型的隐藏值返回适当的模型子类型。

例如,在我的视图(EditorTemplate)我有:

@model MyWebApp.Models.TruckModel
@Html.Hidden("ModelType", Model.GetType())
@Html.EditorFor(m => m.CabSize)

然后,在我的自定义模型绑定器中,我有:

    protected override object CreateModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext, Type modelType)
    {
        var typeValue = bindingContext.ValueProvider
            .GetValue(bindingContext.ModelName + ".ModelType");
        var type = Type.GetType((string)typeValue.ConvertTo(typeof(string)), true);
        var model = Activator.CreateInstance(type);
        bindingContext.ModelMetadata = ModelMetadataProviders.Current
            .GetMetadataForType(() => model, type);
        return model;
    }

typeValuetype变量设置为适当的值(类型为TruckModel),但在执行GetMetadataForType之后,model仍然填充null/默认值。

我查看了几个帖子(这里和这里举几个例子),似乎我做了这里解释的所有事情,但它仍然不适合我。

你可以通过参考我之前关于这个主题的文章找到更多关于视图/模型设置的细节。

正如@sydneyos在上面的评论中所述,我的模型实际上正在被填充,但显然在CreateModel方法中,返回的模型将不包含此时的值。

在我的情况下,我得到一个ArgumentNullException遵循这个方法,我认为这是由于模型没有得到填充。但事实证明,这是不相关的,一旦修复了这个问题,模型绑定就像预期的那样工作了。

最新更新