NET MVC:@section 的目的是什么?

对于一个 ASP.NET MVC 应用程序,我看到了 这篇博客文章。 作者 ScottGu 将 @section添加到 Index.cshtml。

我有几个问题(参考上面的文章) :

  • Cshtml 是共享视图吗?
  • 示例代码在特定视图中使用 @section代码。为什么?

有人能解释一下为什么以及什么时候我会在视图中使用 @section吗?

124835 次浏览

@section用于定义从共享视图覆盖的内容。基本上,它是您调整共享视图的一种方法(类似于 Web 窗体中的母版页)。

你可能会找到 斯科特 · 古的文章很有意思

编辑: 基于附加问题的澄清

@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 就是一个很好的例子。您希望它位于在浏览器中呈现的页面的底部,因为这是最佳实践。

如何从一个基于布局/母版页的视图中实现这一点,您只能访问页面的中间部分?

您可以通过在 Layout 页面底部声明 Scripts 部分来实现这一点。然后您可以添加内容,在这种情况下,Javascript 包括(我希望!),从查看页面到布局页面的底部。

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

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

希望这个能帮上忙。

当需要在布局页面中定义的占位符中呈现一些代码/内容时,需要使用节。

在您链接的特定示例中,他已经在 _ Layout.cshtml 中定义了 RenderSection。任何使用该布局的视图都可以定义与 Layout 中定义的名称相同的@部分,它将替换布局中的 RenderSection 调用。

也许您想知道我们是如何知道 Index.cshtml 使用这种布局的?这是由于一点 MVC/Razor 约定造成的。如果您查看他添加视图的对话框,会选中“使用布局或母版页”复选框,在该复选框的下面写着“如果在 Razor _ viewstart 文件中设置,则保持为空”。它没有显示,但是在 _ ViewStart.cshtml 文件中的代码如下:

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

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

这告诉我们 Index.cshtml 使用 Shared/_ Layout.cshtml。