我是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做了什么以及如何找到这里呈现的内容?
答案 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文件中移动一行代码即可轻松实现。