对于ASP.NET MVC应用程序,我看到了这篇博客文章。作者ScottGu将添加@section
到Index.cshtml。
我有几个问题(请参阅上面的文章):
- Index.cshtml是共享视图吗?
- 示例代码
@section
在特定视图中使用代码。为什么?
有人可以解释为什么以及何时@section
在视图中使用吗?
对于ASP.NET MVC应用程序,我看到了这篇博客文章。作者ScottGu将添加@section
到Index.cshtml。
我有几个问题(请参阅上面的文章):
@section
在特定视图中使用代码。为什么?有人可以解释为什么以及何时@section
在视图中使用吗?
Answers:
@section
用于定义从共享视图覆盖的内容。基本上,这是您调整共享视图的一种方法(类似于Web窗体中的母版页)。
您可能会发现谷歌(Scott Gu)关于这个的文章非常有趣。
编辑:基于其他问题的说明
该@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";
}
您可以通过多种方式来调整此设置,此SO回答中还提到了其他几种方式。
如果要在布局页面中定义的占位符中呈现一些代码/内容,则需要使用节。
在您链接的特定示例中,他在_Layout.cshtml中定义了RenderSection。使用该布局的任何视图都可以定义与Layout中定义的名称相同的@section,它将替换布局中的RenderSection调用。
也许您想知道我们如何知道Index.cshtml使用该布局?这归因于MVC / Razor约定。如果您查看他在其中添加视图的对话框,则会选中“使用布局或母版页”框,并在其正下方显示“如果在Razor _viewstart文件中设置,则留空”。它没有显示,但是在_ViewStart.cshtml文件中的代码如下:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
viewstarts工作的方式是,相同目录或子目录中的任何cshtml文件都将在运行ViewStart之前运行。
这就是告诉我们Index.cshtml使用Shared / _Layout.cshtml的原因。