Вам нужно будет написать пользовательское связующее для модели, чтобы это работало:
public class MyModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue("viewType");
var type = Type.GetType(
(string)typeValue.ConvertTo(typeof(string)),
true
);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
}
, а затем:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult WizardCaseResult([ModelBinder(typeof(MyModelBinder))]object model)
{
...
}
Теперь все, что вам нужно сделать, это убедиться, что формаотправляет параметр ViewType
, который будет указывать на модель представления, которую вы хотите создать.
О, и вы можете забыть о строгой типизации, такой как следующие, когда имеете дело с типами, известными только во время выполнения:*
ViewType vm = new ViewType();
TryUpdateModel<ViewType>(vm);
Вам также может пригодиться следующий ответ .