Могу ли я сделать что-то подобное?
[HttpPost]
public ActionResult Index(WizardViewModel wizard, IStepViewModel step)
{
Где у меня есть следующее в моем global.asax.cs application_start
ModelBinders.Binders.Add(typeof(IStepViewModel), new StepViewModelBinder());
ModelBinders.Binders.Add(typeof(WizardViewModel), new WizardViewModelBinder());
Обновлять
Итак, я попытался увидеть, что не так. Вот мой новый код. Похоже, проблема в этой WizardViewModel и ее связующем. Что «сообщает» приложению, что следует ожидать и входящую модель Wizard?
[HttpPost]
public ActionResult Index(WizardViewModel wizard)
{
Где у меня есть следующее в моем global.asax.cs application_start
ModelBinders.Binders.Add(typeof(WizardViewModel), new WizardViewModelBinder());
Полный код связующего
namespace Tangible.Binders
{
public class StepViewModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var stepTypeValue = bindingContext.ValueProvider.GetValue("StepType");
var stepType = Type.GetType((string)stepTypeValue.ConvertTo(typeof(string)), true);
var step = Activator.CreateInstance(stepType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => step, stepType);
return step;
}
}
public class WizardViewModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var wizardValue = bindingContext.ValueProvider.GetValue("wizard");
if (wizardValue != null)
{
var wizardType = Type.GetType((string)wizardValue.ConvertTo(typeof(string)), true);
var wizard = Activator.CreateInstance(wizardType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => wizard, wizardType);
return wizard;
}
else
{
var wizard = new Tangible.Models.WizardViewModel();
wizard.Initialize();
return wizard;
}
}
}
}
IList<IStepVIewModel>
в качестве атрибута. Это все еще так? Если это так, то ваш WizardViewModelBinder, вероятно, также должен обрабатывать привязку для дочернего класса IStepViewModel. Как и другие, пожалуйста, опубликуйте код привязки модели. - person counsellorben   schedule 08.08.2011