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

时间:2011-01-02 00:40:47

标签: asp.net asp.net-mvc-3 razor

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

  • _viewstart
  • _Layout
  • _LogOnPartial

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

框架是否为以{1}开头的.cshtml文件赋予了一些特殊含义?

6 个答案:

答案 0 :(得分:198)

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 Pages应用程序中使用前导下划线命名布局和部分文件是有意义的,如果它们不打算浏览的话。

答案 1 :(得分:13)

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

没有技术上的理由,只是一个惯例,向其他开发者(以及6个月后自己)清楚地表明意图:这是局部视图。

答案 2 :(得分:7)

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

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

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

以这种方式思考......在MVC 2中...你会在部分视图和mastersite与sufix区分.master,.ascx和普通页面是.aspx,另一方面,在Razor视图中...所有视图都是.cshtml,因此要区分部分和主页,它们将具有前缀(_)。它不是强制性的,只是一种“惯例”。

答案 3 :(得分:2)

据我所知,这只是一个用于识别文件意图的惯例;我不相信它会实际改变文件的行为。在大多数开发环境中,前置下划线表示某些内容用于“私人”使用,无论是通过类,还是在本例中,是另一个模板。

答案 4 :(得分:1)

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

类似于asp.net中的App_Code文件夹

答案 5 :(得分:0)

右键单击 Index.cshtml 文件并选择在浏览器中查看。由此,我们可以在浏览器中测试 index.html 页面(无需运行应用程序)。

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

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

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