14

我的 _Layout.cshtml 中有以下代码:

@if (SiteConfig.Instance.HasCustomMarkup)
{
     @RenderSection("bodyPart1", false)
     @RenderBody()
     @RenderSection("bodyPart2", false)
}
else
{
    <div id="mainContainer">
        @RenderBody()
    </div>        
}

所以我尝试只在某些条件下渲染部分。但这不起作用,我有一个例外:

The following sections have been defined but have not been rendered for the layout page ...

为此目的,mvc 中是否有任何解决方法?谢谢!

4

2 回答 2

26

只需检查部分是否存在,即:

@if (IsSectionDefined("bodyPart1"))
{
    @RenderSection("bodyPart1")
}
于 2013-10-04T10:26:29.240 回答
3

为防止出现异常The following sections have been defined but have not been rendered...,您可以只模拟渲染调用而无需实际渲染。

@if (SOME_CONDITION)
{
    @RenderSection("SectionName", false)
}
else
{
    var fakeSectionRender = RenderSection("SectionName", false);
    if (fakeSectionRender != null) {
        fakeSectionRender.WriteTo(TextWriter.Null);
    }
}

要考虑的缺点是性能,因为这种方法即使在不需要时也会强制渲染。

于 2018-11-14T08:28:09.213 回答