ASP.NET MVC解释@section

对于ASP.NET MVC应用程序,是否有人可以解释为什么以及何时在视图中使用@section

我在这个例子中看到,他在Index.cshtml中添加了@section 。 Index.cshtml是一个共享的视图吗? 示例代码中的内容是“在此视图中使用@section代码,而不是该视图?”。

@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"; } 

有多种方法可以调整这个设置,在这个答案中提到几个。

Javascript是一个很好的例子。 您希望它位于浏览器中呈现的页面底部,因为这是最佳做法。

你如何从一个基于布局/母版页的视图来做到这一点,你只能访问页面的中间?

您可以通过在“布局”页面底部声明“脚本”部分来完成此操作。 然后,您可以添加内容,在这种情况下,Javascript包括(我希望!),从您的查看页面到布局页面的底部。

当想要在布局页面中定义的占位符中呈现一些代码/内容时,您希望使用这些部分。

在你链接的具体例子中,他已经在_Layout.cshtml中定义了RenderSection。 任何使用该布局的视图都可以定义与Layout中定义的相同名称的@section,并将replace布局中的RenderSection调用。

也许你想知道我们如何知道Index.cshtml使用该布局? 这是由于一点MVC /剃刀约定。 如果您查看添加视图的对话框,则选中“使用布局或母版页”框,并在其下方显示“如果在”剃刀_viewstart文件“中设置为空,则保留为空。 它没有显示,但里面_ViewStart.cshtml文件是这样的代码:

 @{ Layout = "~/Views/Shared/_Layout.cshtml"; } 

viewstart的工作方式是在同一目录或子目录中的任何cshtml文件在运行之前将运行ViewStart。

这就是告诉我们Index.cshtml使用Shared / _Layout.cshtml。

它可以让你在你的模板中定义@Section的代码,然后可以包含在其他文件中。 例如,模板中定义的侧栏可以在另一个包含的视图中引用。

 //This could be used to render a @Section defined as @Section SideBar { ... @RenderSection("SideBar", required: false); 

希望这可以帮助。