对于ASP.NET MVC应用程序,我看到了this blog article。作者ScottGu将@section
添加到Index.cshtml。
我有几个问题(参考上面的文章):
@section
代码。为什么?有人能解释一下为什么以及什么时候我会在视图中使用@section
吗?
发布于 2012-10-26 23:11:20
@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中提到的更多方法来调整此设置。
发布于 2012-10-26 23:11:34
Javascript就是一个很好的例子。您希望它位于在浏览器中呈现的页面的底部,因为这是最佳实践。
在基于布局/母版页的视图中,您只能访问页面的中间部分,如何执行此操作?
您可以通过在布局页面底部声明一个Scripts部分来实现这一点。然后,您可以添加内容,在本例中Javascript包括(我希望!),从您的视图页面到布局页面的底部。
发布于 2012-10-27 02:02:53
当您想要在布局页面中定义的占位符中呈现一些代码/内容时,可以使用部分。
在您链接的特定示例中,他在_Layout.cshtml中定义了RenderSection。任何使用该布局的视图都可以定义一个与布局中定义的名称相同的@section,并且它将替换布局中的RenderSection调用。
也许你想知道我们是如何知道Index.cshtml使用这种布局的?这是由于一些MVC/Razor约定造成的。如果你看他正在添加视图的对话框,“使用布局或母版页”框被选中,在它的正下方显示“如果它是在剃刀_viewstart文件中设置的,则保留为空”。它没有显示,但在_ViewStart.cshtml文件中有如下代码:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
ViewStart的工作方式是,同一目录或子目录中的任何cshtml文件都会在ViewStart自身运行之前运行它。
这就是Index.cshtml使用Shared/_Layout.cshtml的原因。
https://stackoverflow.com/questions/13089489
复制相似问题