ASP.NET MVC:@section 的用途是啥? [关闭]

Posted

技术标签:

【中文标题】ASP.NET MVC:@section 的用途是啥? [关闭]【英文标题】:ASP.NET MVC: What is the purpose of @section? [closed]ASP.NET MVC:@section 的用途是什么? [关闭] 【发布时间】:2019-11-14 22:58:08 【问题描述】:

对于一个 ASP.NET MVC 应用程序,我看到了this blog article。 作者 ScottGu 在 Index.cshtml 中添加了@section

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

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

谁能解释我为什么以及何时在视图中使用@section

【问题讨论】:

看看这个教程:weblogs.asp.net/scottgu/archive/2010/12/30/… 虽然可以说今天更好的关闭理由是“主要基于意见”,但它仍然会被关闭。没有明确的使用部分的方法。 没有明确的方法来使用任何东西。看看人们如何使用互联网...... 【参考方案1】:

@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+ 中,您可以直接定义要用于视图的 Layout 文件,也可以为所有视图设置默认视图。

通用视图设置可以在 _ViewStart.cshtml 中设置,它定义了类似这样的默认布局视图:

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

你也可以直接在文件中设置Shared View使用,如index.cshtml直接如本sn-p所示。

@
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";

您可以通过多种方式调整此设置,this SO answer 中提到了更多。

【讨论】:

感谢弗雷泽尔!参考该教程,我在我的问题中添加了更多内容。你能进一步解释一下吗?再次感谢! 嘿@ABogus 我更新了答案。希望这些附加信息对您有所帮助:)【参考方案2】:

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

您将如何从基于布局/母版页的视图中执行此操作,您只能访问页面的中间部分?

您可以通过在布局页面底部声明一个脚本部分来做到这一点。然后你可以从你的视图页面添加内容,在这种情况下,Javascript 包括(我希望!),从你的视图页面到你的布局页面的底部。

【讨论】:

【参考方案3】:

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

在您链接的具体示例中,他在_Layout.cshtml 中定义了RenderSection。使用该布局的任何视图都可以定义与布局中定义的名称相同的@section,它将替换布局中的 RenderSection 调用。

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

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

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

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

【讨论】:

对_ViewStart的很好解释。【参考方案4】:

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

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

希望这会有所帮助。

【讨论】:

以上是关于ASP.NET MVC:@section 的用途是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

服务层和 ASP.NET MVC 2 的用途

在登录页面上滚动 (ASP.NET MVC)

在 ASP.NET MVC Html.ActionLink 中包含锚标记

ASP.NET MVC 中的授权属性

ASP.NET MVC 2 中的上下文/RunWhen 验证?

我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?