38

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

4

3 回答 3

49

斯科特曾一度写道

“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>
}
于 2012-05-26T09:09:21.410 回答
19

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

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

 @RenderSection("head", false)

在您的视图页面中放置:

@section head {

PUT VIEW SPECIFIC CODE HERE
}

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

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

于 2012-05-26T09:08:11.803 回答
0

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

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

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

于 2019-01-29T14:05:03.827 回答