У меня есть настраиваемое связующее устройство, которое я использую для возврата соответствующего подтипа модели на основе скрытого значения, содержащего исходный тип.Полиморфная пользовательская модель, не заполняющая модель w/values
Например, на мой взгляд (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
по-прежнему заполняется нулями/значениями по умолчанию.
Я проверил несколько сообщений (here и here, чтобы назвать пару), и кажется, что я делаю все, как объяснено здесь, но это все еще не работает для меня.
Более подробную информацию о настройке вида/модели можно найти со ссылкой на мой previous post по этой теме.
Я думаю, вы ожидали значения по умолчанию на этом этапе - только после вызовов GetPropertyValue, что на самом деле модель будет заполнена значениями из представления, вы прошли через этот метод? – sydneyos
@sydneyos - Вы правы, значения не должны устанавливаться в этот момент. Я никогда не видел этого из-за исключения, которое было выбрано, прежде чем оно попало к моему контроллеру (несвязанное исключение «ArgumentNullException», но я думал, что это связано). Как только я исправил эту проблему, она попала к моему контроллеру, и, как вы сказали, моя модель была заселена в этот момент. Если вы можете опубликовать это как ответ, я соглашусь с ним. Благодарю. –