在布局文件中渲染部分

时间:2018-02-23 06:53:45

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

我尝试了解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>
}

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

1 个答案:

答案 0 :(得分:0)

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

为什么我们需要sections

有些时候,我们希望在某些特定网页上展示特定内容,例如仅在博客和主页上显示的新手,最新消息或特定网页上的某些广告横幅。对于这些类型的场景,sections在MVC中拯救我们。

我们如何使用section

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

  1. 在布局中声明部分,给它起一个名字并告诉它是否需要 每一页与否。
  2. 在视图中定义
  3. 当视图呈现时,部分内容也会添加到我们声明该部分的位置。

    代码示例

    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 ...
        }