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

在默认的ASP.NET MVC 3项目中,layout&partial cshtml文件以下划线开头

  • _viewstart
  • _Layout
  • _LogOnPartial

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

框架是否给一个以下划线开头的.cshtml文件提供了一些特殊的含义?

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

ASP.NET团队已经指出,Web页面是ASP.NET开发中的一个起点,这将导致及时(为那些想要移动的)迁移到MVC。 其中的一部分意味着从网页迁移到MVC应该尽可能简单。 因此,将Web页面中build立的命名约定inheritance到MVC Razor文件是有意义的。

所以有一个技术原因,在文件名前加一个下划线 – 这与MVC无关。

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

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

无法通过浏览器的直接请求(主页面,部分视图等)显示的页面在其名称的开始处具有下划线(_)。

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

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

想想这样…在MVC 2中…你可以用sufix来区分局部视图和mastersite .master,.ascx和normal页面是.aspx,另一方面在Razor视图中。所有的意见都是.cshtml,所以要区分部分和masterpages他们将有一个前缀(_)。 它不是强制性的,只是一个“惯例”。

据我所知,这只是一个用来识别文件意图的惯例; 我不相信它实际上会改变文件的行为。 在大多数的开发环境中,预先加下划线标识的东西是为了“私人”使用,无论是由类,或在这种情况下,另一个模板。

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

就像在asp.net中的App_Code文件夹