多态定制模型绑定器没有填充模型w /值

时间:2011-11-10 22:29:28

标签: c# asp.net-mvc asp.net-mvc-3 model-binding

我有一个自定义模型绑定器,我用它来根据包含原始类型的隐藏值返回相应的模型子类型。

例如,在我的视图(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 /默认值。

我查看了几个帖子(herehere来命名一对),看起来我正在按照此处的说明执行所有操作,但它仍然不适用于我。

您可以在此主题中参考我的previous post,找到有关视图/模型设置的更多详细信息。

1 个答案:

答案 0 :(得分:0)

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

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