У меня есть пользовательский механизм связывания моделей, который я использую для возврата соответствующего подтипа модели на основе скрытого значения, содержащего исходный тип.
Например, на мой взгляд (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;
}
Переменные typeValue
и type
устанавливаются на соответствующие значения (тип TruckModel
), но после выполнения GetMetadataForType
, model
по-прежнему заполняется значениями null / default.
Я проверил несколько сообщений ( здесь и здесь , чтобы назвать пару), и кажется, что я делаю все, как описано здесь, но это все еще не работает для меня .
Подробнее о настройке вида / модели можно узнать, обратившись к моему предыдущему сообщению по этой теме.