对于ASP.NET MVC应用程序,我看到this blog article。
作者ScottGu将@section
添加到Index.cshtml中。
我有几个问题(参考上面的文章):
@section
代码。为什么?有人可以解释为什么以及何时在视图中使用@section
?
答案 0 :(得分:124)
@section
用于定义从共享视图覆盖的内容。基本上,它是一种调整共享视图的方法(类似于Web窗体中的母版页)。
您可能会找到Scott Gu's write up on this very interesting。
编辑:基于其他问题澄清
@RenderSection
语法进入共享视图,例如:
<div id="sidebar">
@RenderSection("Sidebar", required: false)
</div>
然后使用@Section
语法将其放在您的视图中:
@section Sidebar{
<!-- Content Here -->
}
在MVC3 +中,您可以直接定义要用于视图的布局文件,也可以为所有视图设置默认视图。
可以在_ViewStart.cshtml中设置公共视图设置,它定义了与此类似的默认布局视图:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
您还可以将共享视图设置为直接在文件中使用,例如index.cshtml,如此片段所示。
@{
ViewBag.Title = "Corporate Homepage";
ViewBag.BodyID = "page-home";
Layout = "~/Views/Shared/_Layout2.cshtml";
}
您可以通过多种方式调整此设置,并在this SO answer中提及更多内容。
答案 1 :(得分:18)
一个很好的例子是Javascript。您希望它位于浏览器中呈现的页面底部,因为这是最佳实践。
如何从基于布局/母版页的视图中执行此操作,您只能访问页面中间?
您可以通过在“布局”页面底部声明“脚本”部分来执行此操作。然后你可以添加内容,在这种情况下Javascript包括(我希望!),从你的View页面到你的布局页面的底部。
答案 2 :(得分:3)
如果希望在布局页面中定义的占位符中呈现一些代码/内容,则需要使用部分。
在您链接的特定示例中,他在_Layout.cshtml中定义了RenderSection。任何使用该布局的视图都可以定义与Layout中定义的同名的@section,它将替换布局中的RenderSection调用。
也许您想知道我们如何知道Index.cshtml使用该布局?这是由于一些MVC / Razor惯例。如果您查看他正在添加视图的对话框,则会选中“使用布局或母版页”框,并在其下方显示“如果在Razor _viewstart文件中设置则保留为空”。它没有显示,但_ViewStart.cshtml文件内部的代码如下:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
viewstart的工作方式是同一目录或子目录中的任何cshtml文件在运行之前都会运行ViewStart。
这告诉我们Index.cshtml使用Shared / _Layout.cshtml。
答案 3 :(得分:2)
它允许您在模板中定义@Section
代码,然后您可以将其包含在其他文件中。例如,模板中定义的侧边栏可以在另一个包含的视图中引用。
//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);
希望这有帮助。