为什么 Razor_layout.cshtml 在文件名中有一个前置下划线?

在默认的 ASP.NET MVC 3项目中,布局和部分 cshtml 文件以下划线开始

  • _viewstart
  • _Layout
  • _LogOnPartial

为什么是这个约定,这个约定是用来做什么的? 我需要遵循这个约定吗?

框架是否赋予以下划线开头的 .cshtml文件一些特殊含义?

32612 次浏览

无法通过浏览器直接请求显示的页面(母版页、部分视图等)的名称开头都有下划线(_)。

因此,如果您尝试向 _ Layout.cshtml 发出请求(这是母版页) ,您将从服务器得到一个错误。

这是一种在 Razor 视图引擎中区分不能作为独立页面浏览的文件的方法。

这样想吧... 在 MVC 2中... 你可以用后缀区分部分视图和主站点。师父。Ascx 和普通页面是。另一方面,在 Razor 视图中... 所有视图都是。Cshtml,因此为了区分部分页面和母版页面,它们将有一个前缀(_)。它不是强制性的,只是一个“惯例”。

据我所知,这只是一个用于识别文件意图的约定; 我不相信它会真正改变文件的行为。在大多数开发环境中,前缀下划线标识了一些用于“私有”用途的内容,无论是由类使用,还是在本例中由另一个模板使用。

Ruby on Rails 就是这么做的(Partials 以 _ 开头,但 Render 局部调用不包括 _) ,ASP.net MVC 从中获得了很多灵感。

实际上没有技术原因,只是一个约定,清楚地向其他开发人员(以及6个月后的自己)表明意图: 这只是部分观点。

Razor 是为 ASP.NET Web Pages (WebMatrix)开发的,它没有像 MVC 中那样内置对视图文件夹和路由的保护。由于网页中的布局页并不打算直接提供服务,因此它们都以下划线作为前缀。而且 Web 页面框架已经配置为不允许直接请求名称中带有前导下划线的文件。其他。Web 页中的 cshtml 文件通常需要是可浏览的。它们相当于。毒蛇或者。Php 文件。

NET 团队已经声明,Web Pages 是 ASP.NET 开发的一个起点,这将及时导致向 MVC 的迁移(对于那些希望继续前进的人来说)。这意味着从 Web 页面迁移到 MVC 应该尽可能容易。因此,将 Web 页面中建立的命名约定继承到 MVC Razor 文件是有意义的。

所以 在文件名前面加上下划线是有技术原因的——它和 MVC 没有关系。

[2018年10月更新]

在新的 ASP.NET Core Razor Pages 框架(除了版本2.1)中,当路由在启动时生成时,带有前导下划线的文件被忽略——即使它们有一个 @page指令(这通常使它们成为一个可路由的 Razor Page)。这就是为什么在 Razor Pages 应用程序中,如果不打算浏览布局和部分文件,那么使用前导下划线来命名它们是有意义的。

我不使用 MVC,但是对于使用剃刀语法的网页,_ 前缀通常意味着页面不是由用户访问的,而是由其他页面或某些代码访问的。 如果您尝试导航到包含 _ 前缀的页面,asp.net 将阻止对它的访问。 这就是为什么它与布局页面和其他类似的页面一起使用,因为它们不应该被用户直接访问。

与 asp.net 中的 App _ Code 文件夹类似

右键单击 Index.cshtml 文件并选择 View In Browser。从这里,我们可以在浏览器中测试 index.html 页面(无需运行应用程序)。

对 _ Layout.cshtml 页面执行相同操作,它将显示错误或浏览器将呈现默认页面(Home/Index.cshtml)。

因为前缀为 _ 的页不会通过浏览器进行测试。

我们可以通过嵌入另一个 cshtml 页面来测试这些页面(_ Layout. cshtml)。