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

时间:2013-05-13 17:10:58

标签: asp.net-mvc mvc-editor-templates razor-2

我有一个强类型的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方法两次。

1 个答案:

答案 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 *@
}