这段 rendersection 代码的含义是什么?

39

我是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。在这种情况下,定义了 section head,并且在其中渲染了相同的 head,这让我感到困惑。
RenderSection 是做什么的?我该如何找到这里正在渲染的内容?
3个回答

51

Scott曾经写道:

“RenderSection()”辅助方法的第一个参数指定了我们想要在布局模板中的该位置呈现的部分的名称。第二个参数是可选的,并允许我们定义我们正在渲染的部分是否是必需的。如果一个部分是“必需的”,那么当基于布局文件的视图模板中没有实现该部分时,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)

子布局:

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

Content:

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

19

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

在您的布局(主)页面中添加以下内容:

 @RenderSection("head", false)

在你的视图页面中添加以下内容:

@section head {

PUT VIEW SPECIFIC CODE HERE
}

这里的 "head" 是你可以在视图页面中定义的一个部分的名称。

有点像我们在ASP.NET WebForms中使用的 ContentPlaceHolder。


1
我理解,但我发布的代码定义了 '@section' 头部,并在花括号内再次调用 RenderSection。 '@section' 头部不应该在子页面中定义吗? - Tim Tom

0
通过在您的_Layout文件中使用@rendersection,您可以控制主要.cshtml代码(假设它被称为index.cshtml)中部分的布局和顺序。
例如,如果您在_Layout文件的末尾有一个@RenderSection("scripts", false),即使“scripts”部分放置在index.cshtml文件的顶部,它也将呈现在底部。从而确保所有脚本部分在整个应用程序中以一致的方式加载。
如果将来您因某种原因决定将所有脚本移动到头部部分,您只需在_Layout文件中移动一行代码即可轻松完成此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接