【问题标题】:What does this code of rendersection mean?这个rendersection的代码是什么意思?
【发布时间】:2012-06-01 15:45:51
【问题描述】:

我是 Asp.Net MVC3 的初学者。谁能解释一下这段代码的含义:

@section head
{
    @RenderSection("head", false)
}

关于 ScottGu 的文章:

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

有一个 RenderSection 的例子,但它定义了@section,然后在某个地方使用了@RenderSection。在这种情况下,定义了节头,并且在该节头内部正在呈现相同的头,这让我感到困惑。

RenderSection 有什么作用以及如何找到这里渲染的内容?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    通过在 _Layout 文件中使用 @rendersection,您可以控制主 .cshtml 代码中部分的布局和顺序(可以说它称为 index.cshtml)

    例如,如果您的 _Layout 文件末尾有一个 @RenderSection("scripts", false),那么即使“scripts”部分位于 index.cshtml 文件的顶部,它也会被渲染在底部。从而确保在整个应用程序中以一致的方式加载所有脚本部分。

    如果将来您出于某种原因决定将所有脚本移至 head 部分,您只需在 _Layout 文件中移动一行代码即可轻松做到这一点。

    【讨论】:

      【解决方案2】:

      Scott 曾写过一篇文章

      “RenderSection()”辅助方法的第一个参数指定 我们要在该位置呈现的部分的名称 布局模板。第二个参数是可选的,允许我们 定义我们正在渲染的部分是否是必需的。如果一个 部分是“必需的”,那么 Razor 将在运行时抛出错误,如果 该部分未在基于的视图模板中实现 在布局文件上(这样可以更容易地追踪内容 错误)。

      因此,RenderSection 所做的是渲染模板/视图中定义的部分(而不是一般的 _Layout)。 在“在我们的视图模板中实现“侧边栏”部分”下,他解释了如何实现一个部分。

      总而言之,您所拥有的是一个名为“head”的部分,它在一个更向下/嵌套的视图中呈现一个名为“head”的部分。

      编辑:查看http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx 以了解我对嵌套视图的含义 - 但请注意,这篇文章已经有一年多了。

      主布局:

      @RenderSection("head", false)
      

      子布局:

      @{
          Layout = "~/Views/_MasterLayout.cshtml";
      }
      @section head
      {
          @RenderSection("head")
      }
      

      内容:

      @{
          Layout = "~/Views/_SubLayout.cshtml";
      }
      @section head
      {
          <title>Content-Layout</title>
      }
      

      【讨论】:

        【解决方案3】:

        您在视图中定义部分并在 _Layout.cshtml 中呈现它。

        在您的布局(母版)页面中放置:

         @RenderSection("head", false)
        

        在您的视图页面中放置:

        @section head {
        
        PUT VIEW SPECIFIC CODE HERE
        }
        

        这里的“head”是您可以在视图页面中定义的部分的名称。

        它有点像我们在 asp.net 网络表单中使用的 ContentPlaceHolder。

        【讨论】:

        • 我明白这一点,但我发布的代码定义了“@section”头部和大括号内再次调用 RenderSection。 '@section' head 不应该在子页面中定义吗?
        猜你喜欢
        • 2011-05-28
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多