我有一个强类型的Razor 2编辑器模板。当视图模型满足某些条件时,我希望视图委托给相同类型的替代模板。我使用EditorFor帮助器的TemplateName参数来选择替代模板:
@model MyType
@if (Model.IsSpecialCase)
{
@Html.EditorFor(m => m, "SpecialCaseTemplate")
}
else
{
@* Default markup *@
}
问题是,Razor没有调用替代模板;它只是通过EditorFor方法。如果我更改第二个模板的类型,它会正确显示。我可以使用部分视图来解决这个问题,但我不愿意,因为我有一个计划与我希望坚持的编辑器模板一起使用。
任何人都知道如何让它发挥作用?
修改
看起来这与此处描述的行为有关:ASP.net MVC - Using EditorFor with the same model type twice。简而言之,MVC不支持在同一对象上使用EditorFor方法两次。
答案 0 :(得分:0)
执行此操作的最佳方法是从Controller返回不同的视图:
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 *@
}