【问题标题】:Render section inside layout file在布局文件中渲染部分
【发布时间】:2018-02-23 06:53:44
【问题描述】:

我试图了解 Razor 视图中部分的工作原理。我有 2 个布局文件:_Layout.cshtml 和 _LayoutChild.cshtml,它们使用内部的第一个布局。我尝试在_Layout.cshtml 中声明部分并将其呈现在同一个文件中。标记没有出现,但是当我在_LayoutChild.cshtml 中声明部分时,一切正常。请参见下面的示例:

_Layout.cshtml:

<!DOCTYPE html>
<html>    
  <head>
    @RenderSection("A", false)
  </head>
  <body>
    @section A{
      <script>
        alert("I'm in Layout!");
      </script>
    }
  </body>
</html>

_LayoutChild.cshtml

@{
    Layout = "_Layout";
}

@section A{
   <script>
        alert("I'm in LayoutChild!");
   </script>
}

我知道在同一个文件中声明部分看起来很奇怪,但我想知道为什么它不起作用?

【问题讨论】:

  • 请参阅我会将 _layoutchild.cshtml 视为部分内容。因此我不会使用@RenderSection(),而是使用@Html.Partial()。我认为这会更好地解释。 weblogs.asp.net/scottgu/… 虽然老了,但它仍然是相关的
  • 想一想,它永远不会像您期望的那样工作。 @RenderBody() 应该在 _layout.cshtml 中。然后,一旦您进行渲染,例如 Index(该部分将在实际的 index 与布局内)。
  • 我认为 _LayoutChild.cshtml 用作视图文件。对吗?

标签: c# .net asp.net-mvc razor asp.net-core-mvc


【解决方案1】:

在开发网站或应用程序时。每个页面都有一些共同的部分,如页眉、页脚、侧边栏等。在每一页上编写和维护这些都是一项艰巨的工作。所以,我们需要一种方法将它们放在一个地方。幸运的是,在 MVC 中,我们有 Layout 概念。我们将所有通用代码放入其中并更改Views 中的内容,这将呈现在我们调用@RenderBody() 方法的布局中。

为什么我们需要sections?

有时我们希望在某些特定页面上显示特定内容,例如仅在博客和主页上显示的时事通讯、头条新闻或特定页面上的某些广告横幅。对于这些类型的场景sections 在 MVC 中拯救我们。

我们如何使用section?

我们需要按照这两个步骤来使用 MVC 中的部分。

  1. 在布局中声明部分,给它一个名字并告诉它是否需要 每一页与否。
  2. 在视图中定义

当视图呈现时,部分内容也会添加到我们声明部分的位置。

代码示例

1. 大多数时候,我们需要一些特定的 JavaScript 代码来查看。所以我们可以这样做

_Layout.cshtml

  @RenderSection("scripts", required: false) 

view.cshtml

 @section scripts{
      <script>
        alert("I'm in Layout!");
      </script>
    }

2.新闻信示例

_Layout.cshtml

  @RenderSection("newletter", required: false) 

view.cshtml

 @section newletter{
     <h3> New Letter </h3>
     ... rest of the html ...
    }

【讨论】:

  • 感谢您提供翔实的回复,但它并不能解释我遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2011-04-17
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多