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