ASP.NET MVC - 在Layout中有条件地渲染部分

时间:2013-10-04 10:15:26

标签: asp.net layout conditional render

我在_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中是否有任何解决方法? 谢谢!

2 个答案:

答案 0 :(得分:22)

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

@if (IsSectionDefined("bodyPart1"))
{
    @RenderSection("bodyPart1")
}

答案 1 :(得分:0)

要防止发生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);
    }
}

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