【问题标题】:Can one MVC Edit Template delegate to another?一个 MVC 编辑模板可以委托给另一个吗?
【发布时间】:2013-05-14 14:01:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • @Kennneth,谢谢,但在我使用的场景中,这些方法都不是很方便。我总结了这个问题以便于阅读,但实际上,所讨论的类型嵌入在一个复杂的分层模型中。部分视图方法有效,但与我对模型其余部分的编辑器模板的使用不一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多