为什么Razor _layout.cshtml在文件名中有一个前导下划线?

ric*_*chb 139 asp.net razor asp.net-mvc-3

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

  • _viewstart
  • _Layout
  • _LogOnPartial

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

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

Mik*_*ind 200

Razor是为ASP.NET网页(WebMatrix)开发的,它没有与MVC中的视图文件夹和路由相同的内置保护.由于Web页面中的布局页面不是直接提供的,因此它们以下划线为前缀.并且Web页面框架已配置为不允许直接请求名称中带有前导下划线的文件.Web页面中的其他.cshtml文件通常需要可浏览.它们相当于.asp或.php文件.

ASP.NET团队已经声明Web页面是ASP.NET开发中的一个起点,它应该导致及时迁移到MVC(对于那些想要继续前进的人).部分原因是它应该尽可能简单地从Web页面迁移到MVC.因此,将Web页面中建立的命名约定转换为MVC Razor文件是有意义的.

因此,有一个技术原因,用下划线前缀的文件名-它只是不相关的MVC.

[2018年10月更新]

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

  • 谢谢.对我来说,这是最有见地的答案.我误以为Razor与MVC有关.现在我看到领先下划线的原因是阻止它们直接在ASP.NET网页下提供. (6认同)

Mic*_*tum 13

Ruby on Rails就是这样做的(Partials以_开头,但Render Partial调用不包含_),ASP.net MVC从中吸取了很多灵感.

真的没有技术上的原因,只是一个明确向其他开发者(和你自己6个月后)说明意图的惯例:这是一个局部视图.


Juz*_*tin 7

浏览器的直接请求无法显示的页面(母版页,部分视图等)在其名称的开头有下划线(_).

因此,如果您尝试向_Layout.cshtml(这是母版页)发出请求,您将从服务器收到错误.

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

可以这样想......在MVC 2中...你可以将局部视图和主人与sufix区分开来.master,.ascx和普通页面是.aspx,另一方面,在Razor视图中......所有视图都是.cshtml,因此要区分部分页面和主页面,它们将具有前缀(_).它没有强制性,只是一个"惯例".

  • 但是,根据该逻辑,所有cs和cshtml文件都不会以下划线为前缀? (3认同)
  • 问题是关于asp.net mvc,而不是网页 (2认同)