一个MVC编辑模板可以委托给另一个吗?

问题描述:

我有一个强类型的Razor 2编辑器模板。当视图模型符合某些条件时,我希望视图委托给相同类型的替代模板。我用的是TEMPLATENAME参数来EditorFor助手来选择替代的模板:一个MVC编辑模板可以委托给另一个吗?

@model MyType 
@if (Model.IsSpecialCase) 
{ 
    @Html.EditorFor(m => m, "SpecialCaseTemplate") 
} 
else 
{ 
    @* Default markup *@ 
} 

问题是,剃刀不叫另类模板;它只是通过EditorFor方法。如果我更改第二个模板的类型,它会正确显示它。我可以使用局部视图来解决这个问题,但我宁愿不要,因为我有一个使用编辑器模板的方案,我想坚持。

任何人都知道我可以如何得到这个工作?

编辑

貌似这个事做与这里所描述的行为:ASP.net MVC - Using EditorFor with the same model type twice。简而言之,MVC不支持在同一对象上使用EditorFor方法两次。

要做到这一点,最好的办法是从你的控制器返回了不同的看法:

public ActionResult someaction(){ 
    var Model = ...; 
    if (Model.IsSpecialCase){ 
     return View("SpecialCaseTemplate"); 
    } 
    else{ 
     return View(); 
    } 
} 

或者,你可以做这样的观点:

@model MyType 
@if (Model.IsSpecialCase) 
{ 
    Html.RenderPartial("SpecialCaseTemplate", model); 
} 
else 
{ 
    @* Default markup *@ 
} 
+0

@Kennneth,谢谢,但在我使用的场景中,这两种方法都不是很方便。我总结了这个问题,使其易于阅读,但事实上,所讨论的类型嵌入了复杂的分层模型。局部视图的方法起作用,但与我在模型的其余部分使用编辑器模板不一致。 – 2013-05-14 05:56:40