ASP.NET Web Pages(Razor v2/v3)中的文件夹结构与约定详解
ASP.NET Web Pages 虽然轻量,但它遵循一套非常清晰的文件夹约定,理解这些约定能让你项目结构清晰、路由自动工作、布局自动应用、功能模块化。下面是官方推荐 + 实际生产中最常用、最好用的文件夹结构(适用于 WebMatrix、Visual Studio、IIS 部署都一样)。
推荐的标准文件夹结构(2025 年依然最佳实践)
MyWebSite/ ← 网站根目录
│
├── _ViewStart.cshtml ← 全局默认布局(非常重要)
├── Web.config ← 路由、数据库等配置
├── Default.cshtml ← 首页(可有可无)
├── About.cshtml
├── Contact.cshtml
│
├── App_Data/ ← 自动只读,存放数据库文件
│ ├── MyDatabase.sdf ← SQL Server Compact(.sdf)
│ └── MyDatabase.mdf ← SQL Server Express(如果用)
│
├── App_Code/ ← 放自定义类、助手函数(自动编译)
│ ├── Helpers.cshtml ← @helper 语法写助手
│ ├── MyClass.cs ← 普通 C# 类
│ └── Utils.cs
│
├── Shared/ ← 推荐存放共享布局和局部视图
│ ├── _Layout.cshtml ← 主布局页
│ ├── _Header.cshtml ← 局部视图(@RenderPage)
│ ├── _Footer.cshtml
│ └── _AdminLayout.cshtml
│
├── Content/ 或 css/ ← CSS、图片、字体等静态资源
│ ├── css/site.css
│ ├── images/logo.png
│ └── fonts/
│
├── Scripts/ ← JavaScript 文件
│ ├── jquery.js
│ └── site.js
│
├── Admin/ ← 后台文件夹(可以有自己的布局)
│ ├── _ViewStart.cshtml ← 只对 Admin 目录生效,可指定不同布局
│ ├── Index.cshtml ← /Admin 或 /Admin/Index
│ ├── Users.cshtml
│ └── Products.cshtml
│
├── Products/ ← 产品模块(自动成为路由)
│ ├── Index.cshtml ← /Products
│ ├── Detail.cshtml ← /Products/Detail?id=5
│ └── _ViewStart.cshtml ← 可选:该目录专用布局
│
├── Files/ 或 Uploads/ ← 用户上传文件(建议放根目录以外,或加访问限制)
│ └── avatar.jpg
│
└── bin/ ← 部署后自动生成,勿手动修改
各文件夹的特殊作用与约定(超级重要)
| 文件夹 | 是否必须 | 特殊约定与作用 | 典型内容 |
|---|---|---|---|
| App_Data | 强烈推荐 | IIS 自动禁止 Web 访问(最安全),专门存放数据库文件(.sdf、.mdf、.mdb) | SQL CE、SQL Express、Access 数据库 |
| App_Code | 推荐 | 里面的 .cs 和 .cshtml 文件会自动编译,可直接在页面中使用类名或 @helper | 自定义类、@helper 助手函数 |
| Shared | 强烈推荐 | 推荐存放 _Layout.cshtml、_ViewStart.cshtml、局部页面,结构更清晰 , 易于团队协作 | 布局页、局部视图 |
| Scripts | 约定 | 标准 JS 目录,~ 路径可正确解析 | jQuery、自定义 JS |
| Content/css | 约定 | 标准 CSS、图片目录 | site.css、bootstrap.css、images |
| Admin | 示例 | 任意自定义文件夹都会自动成为路由前缀:/Admin/Index → Admin/Index.cshtml | 后台所有页面 |
| 任意文件夹 | – | 只要在里面放 .cshtml 文件,就自动支持路由:/Products/Detail → Products/Detail.cshtml | 业务模块(News、Blog、Shop 等) |
| 根目录 | – | 放不需要路由前缀的页面(如首页、About、Contact) | 公共页面 |
路由规则(你不需要写任何配置,自动生效)
| 你请求的 URL | 实际映射到的文件 | 说明 |
|---|---|---|
| / | Default.cshtml 或 Index.cshtml | 根目录优先级:Default > Index |
| /About | /About.cshtml | 同名文件 |
| /Products | /Products/Index.cshtml | 文件夹 + Index |
| /Products/Detail?id=1 | /Products/Detail.cshtml | 自动参数传递 |
| /Admin | /Admin/Index.cshtml 或 /Admin/Default.cshtml | 后台路由 |
| /Files/avatar.jpg | 直接返回静态文件 | 静态资源直接访问 |
小技巧:让不同文件夹使用不同布局
// Admin/_ViewStart.cshtml (只影响 Admin 目录及子目录)
@{
Layout = "~/Shared/_AdminLayout.cshtml";
}
// Products/_ViewStart.cshtml
@{
Layout = "~/Shared/_ProductLayout.cshtml";
}
根目录的 _ViewStart.cshtml 是全局默认,子目录的会覆盖它,实现“按模块不同布局”。
总结:最推荐的干净结构(复制粘贴就可用)
/
├── _ViewStart.cshtml
├── Web.config
├── Default.cshtml
├── Shared/
│ └── _Layout.cshtml
├── App_Data/
├── App_Code/
├── Content/css/
├── Content/images/
├── Scripts/
├── Admin/
│ ├── _ViewStart.cshtml → 用 _AdminLayout.cshtml
│ └── *.cshtml
└── Blog/
├── _ViewStart.cshtml → 可选不同布局
└── *.cshtml
这样组织项目,你会发现:
- 路由自动工作,不用写一行配置
- 布局自动应用,子目录还能覆盖
- 数据库最安全(App_Data)
- 代码与页面分离(App_Code)
- 多人协作、后期维护都非常清晰
需要我给你打包一个这个结构的完整可运行 demo 项目(含数据库、后台、前台)吗?10 分钟就能跑起来。