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

  • _viewstart
  • _Layout
  • _LogOnPartial

为什么会有这样的惯例,它的用途是什么?我需要遵守这个惯例吗?

这个框架对以下划线开头的.cshtml文件有什么特殊意义吗?

推荐答案

Razor是为ASP开发的.NET网页(WebMatrix),它在视图、文件夹和路由方面没有MVC内置的保护.由于网页中的布局页面不打算直接提供服务,所以它们的前缀是下划线.网页框架已经配置为不允许直接请求名称中带有前导下划线的文件.另外网页中的cshtml文件通常需要可浏览.它们相当于.asp或.php文件.

ASP.NET团队已经声明,Web页面是ASP.NET开发的起点,这应该会导致及时迁移到MVC(对于那些想要继续前进的人).这在一定程度上意味着从Web页面迁移到MVC应该尽可能容易.因此,将网页中建立的命名约定延续到MVC Razor文件是有意义的.

因此,在文件名前面加下划线有一个技术原因——它与MVC无关.

[UPDATE Oct 2018]

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

Asp.net相关问答推荐

.NET 框架 3.5 和 TLS 1.2

.net 中的 [] 括号是什么?

逐步 ASP.NET 自动构建/部署

如何在 ASP.NET 中设置自动实现属性的默认值

cookie 存储在系统的什么位置?

下载功能在 asp.net 的更新面板中不起作用

Automapper - 映射器已初始化错误

更新到 ASP.NET Core 2.0 - 包与 netcoreapp2.0 不兼容

如何从以特定名称开头的 appsettings 键中获取所有值并将其传递给任何数组?

如何在没有实体框架的情况下使用 ASP.NET Identity 3.0

将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题

来自 IP 地址的经度和纬度值

如何在 ASP.NET MVC3 中配置区域

尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19

设置 Response.Status 生成HTTP 状态字符串无效异常

<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")%>

svg 无法在 localhost 上的 IIS 网络服务器上运行

通过 ASP.NET/C# 使用 Plupload

GZIP 与 DEFLATE 压缩相比有什么优势?

ASP.NET 5 (vNext) - 获取配置设置