2

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)
}

私が直面している問題は、このネストされたマスター ページを使用すると、マスター ページがセクションが常に定義されていると見なすことです。これにより、else 部分が表示されることはありません。ネストマスターのセクションの名前を変更してマスターで確認しようと思ったのですが、ネストマスターが多くて、そのパターンでマスターに不要な爆発が起きてしまう気がしました。どうすればこれを機能させることができますか?

4

1 に答える 1

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")
于 2012-09-19T14:55:23.270 に答える