asp.net-mvc - 如何使嵌套母版页 Razor 部分未定义?

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

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

最佳答案

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

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

关于asp.net-mvc - 如何使嵌套母版页 Razor 部分未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496649/

相关文章:

c# - 你能用参数做一些像 RoutePrefix 这样的事情吗?

asp.net-mvc - MVC 在一个 View 中显示多个表?

asp.net-mvc-3 - 如何在MVC3自定义编辑器模板中获取属性名称

asp.net-mvc - ASP.Net MVC 4 通用主要困难

javascript - 如何在没有路径问题的情况下在母版页 header 中包含 jquery?

jquery - Grid.MVC 日期过滤器

asp.net-mvc - 如何使用 visual studio 在另一个项目中共享一个项目的 css 和 js 文件?

asp.net - 如何在 asp.net BundleConfig 中忽略特定包以进行优化

c# - 解析器错误消息 : Could not load type 'webmarketing'

asp.net - 在带有母版页的网络表单中使用 dropzone.js