1

我有一个强类型的 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 two。简而言之,MVC 不支持对同一对象使用两次 EditorFor 方法。

4

1 回答 1

0

最好的方法是从控制器返回不同的视图:

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 *@
}
于 2013-05-13T17:21:19.847 回答