如何才能使嵌套的母版页剃刀部分未定义?

时间:2012-09-19 14:16:30

标签: asp.net-mvc razor master-pages

在Razor中,我有一个母版页,其中定义了一个部分,代码如果没有值则会显示一些默认值:

<html>
<head><title>Title</title></head>
<body>
    @if (IsSectionDefined("optionalSection"))
    {
        @RenderSection("optionalSection", required: false)
    }
    else
    {
        <div>Some default content</div>
    }
</body>
</html>

我还有一个嵌套的母版页面,它创建了一个传递剖面定义:

@section optionalSection {
    @RenderSection("optionalSection", required: false)
}

我遇到的问题是,当我使用这个嵌套的母版页时,母版页认为该部分始终是定义的。这将永远不会显示其他部分。我想改变嵌套母版中的部分名称并在母版中检查它,但是我们有许多嵌套的母版,如果我们遵循这种模式,我觉得主人会有不必要的爆炸。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以编写自定义扩展方法:

public static class SectionExtensions
{
    public static HelperResult RedefineSection(
        this WebPageBase page,
        string sectionName
    )
    {
        if (page.IsSectionDefined(sectionName))
        {
            page.DefineSection(
                sectionName,
                () => page.Write(page.RenderSection(sectionName))
            );
        }
        return new HelperResult(_ => { });
    }
}

然后在您的嵌套布局中调用此扩展方法以重新定义该部分:

@this.RedefineSection("optionalSection")