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


132

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

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

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

有人可以解释为什么以及何时@section在视图中使用吗?



1
虽然可以说今天更好的关闭原因将是“主要基于意见”,但仍会关闭。没有确定的方式使用节。
理查德

2
没有确定的方式来使用任何东西。看看人们如何使用互联网...
keji

Answers:


138

@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回答中还提到了其他几种方式。


谢谢弗雷泽尔!我在参考该教程的问题中添加了更多内容。您能进一步解释吗?再次感谢!

嘿@ABogus我更新了答案。希望这些附加信息对您有帮助:)
Frazell Thomas

21

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

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

通过在“布局”页面底部声明“脚本”部分来执行此操作。然后,您可以从“视图”页面到布局页面的底部添加内容(在这种情况下,Java语言包含(希望!))。


4

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

在您链接的特定示例中,他在_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的原因。


_ViewStart的不错的解释。
2015年

3

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

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

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.