多态自定义模型绑定器没有填充模型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 ),但在执行GetMetadataForTypemodel仍然填充了null / default值。

我检查了几个post( 这里和这里列出一对夫妇),看起来我正在做这里所解释的一切,但它仍然不适合我。

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

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

在我的情况下,我在这个方法之后得到了一个ArgumentNullException ,我认为这是由于模型没有被填充。 但事实certificate,它是无关的,一旦修复,模型绑定按预期工作。