在默认的ASP.NET MVC 3项目中,布局&部分cshtml文件以下划线开头
_viewstart
_Layout
_LogOnPartial
为什么这个惯例,这是用来做什么的?我需要遵循这个惯例吗?
框架是否为以{1}开头的.cshtml
文件赋予了一些特殊含义?
答案 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)。