我有以下viewmodels:
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());
然而 - 粘合剂永远不会被调用。这是因为它是嵌套的吗?框架是否足够聪明,可以看到有一个所需类型的子视图模型来匹配这个绑定器?
[编辑]
这里是模型绑定器的代码(虽然它永远不会到达这一点):
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;
}
瓦特://
答案 0 :(得分:2)
这应该有用,至少它对我有用。我采用了你所展示的完全相同的代码。你唯一没有看到的是视图。
所以我测试了以下内容:
~/Views/Home/Index.cshtml
:
@model ViewModel2
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Bar)
<input type="submit" value="OK" />
}
和编辑器模板(~/Views/Home/EditorTemplates/ViewModel1.cshtml
):
@model ViewModel1
@Html.Hidden("TableInputModelTypeName", "foobar")
@Html.EditorFor(x => x.Foo)
当我提交表单时,自定义模型绑定器按预期命中。