这个渲染代码是什么意思?

时间:2012-05-26 08:57:24

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

我是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做了什么以及如何找到这里呈现的内容?

3 个答案:

答案 0 :(得分:46)

斯科特一度写道

  

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

因此,RenderSection的作用是渲染模板/视图中定义的部分(不是一般的_Layout)。 在我们的视图模板中“实现”SideBar“部分下面的一点点下方”他解释了如何实现一个部分。

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

编辑:看一下http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx,了解我对嵌套视图的意思 - 但请注意,这篇文章现已超过一年了。

MasterLayout:

@RenderSection("head", false)

SubLayout:

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

内容:

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

答案 1 :(得分:18)

您可以在视图中定义该部分并在_Layout.cshtml中进行渲染。

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

 @RenderSection("head", false)

在您的视图页面中显示:

@section head {

PUT VIEW SPECIFIC CODE HERE
}

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

它有点像我们在asp.net webforms中使用的ContentPlaceHolder。

答案 2 :(得分:0)

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

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

如果将来由于某种原因决定将所有脚本移动到头部,则只需在_Layout文件中移动一行代码即可轻松实现。