У меня есть следующие модели представления:
public class ViewModel1{
public string Foo{get;set;}
}
public class ViewModel2{
public ViewModel1 Bar{get;set;}
}
И следующий контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new ViewModel2();
return View(model);
}
[HttpPost]
public ActionResult Index(ViewModel2 model)
{
return View(model);
}
}
И у меня есть пользовательское связующее модель, настроенное как:
ModelBinders.Binders.Add(typeof(ViewModel1), new ViewModel1ModelBinder());
Однако - связыватель никогда не вызывается.Это потому что оно вложено?достаточно ли умен фреймворк, чтобы увидеть, что есть дочерняя модель представления требуемого типа для соответствия этому связующему?
[edit]
вот код для связывателя модели (хотя он никогда не достигает этоготочка):
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TableInputModelTypeName");
string typeAndNS = modelType.Namespace + "." + typeValue.AttemptedValue;
var type = Type.GetType(typeAndNS, true);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
w: //