13

如果我有一个页面:

<body>
    @section SomeStuff {
        <span>This is a section I just addered</span>
    }

</body>

布局是否有可能呈现此部分,或者与它在概念上的工作方式相反。似乎不能在页面上呈现某些部分会很有用(除非我不正确地考虑这一点)。

编辑:

包括错误消息可能会有所帮助,当我将一个部分放入主页时,布局页面失败:The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff".好像它迫使我呈现页面上的每个部分或其他东西。

换句话说,在 Layout.cshtml 中,我调用 @RenderSection,但在 Index.html 中我有一个称为已SomeStuff定义的部分。那合法吗?似乎它迫使我呈现页面中的所有部分,但这似乎部分应该是可选的,不是吗?

4

5 回答 5

27

您可以指定是否需要某个部分。

@RenderSection("SomeStuff", required: false)

如果你不在视图中渲染它,那么它不应该出错,注意这里

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

于 2013-05-17T14:32:59.933 回答
6

您可以通过将 required 参数设置为 false 来将部分设置为可选。如果您想在您的部分周围包含一些可选的包装器 HTML,那么您也可以使用IsSectionDefined方法。

@if(IsSectionDefined("SideBar"))
{
    <div class="sidebar">
        @RenderSection("SideBar", required: false)
    </div>
}
于 2014-06-21T17:04:58.137 回答
4

对于不呈现某些部分的某个布局,您需要有类似这样的东西是您的 layout.cshtml

@RenderSection("Somestuff", required:false)
于 2013-05-17T14:33:34.097 回答
0

你可以这样做:

  @if (condition) {
     @RenderSection("SomeStuff")
  }

或者直接使用 aconditional statement而不是@RenderSection

 @if (yourCondition) {
    <span>This is a section I just addered</span>
 }
于 2013-05-17T14:23:45.520 回答
0

当我尝试将代码动态注入内联脚本时遇到了类似的问题,我通过以下方式解决了它:

@if (someCondition)
    {
        @Html.Raw(@"
              Your stuff here
        ");
    }
于 2018-05-25T06:41:57.120 回答