📘 第5章:ASP.NET Web Pages – 全局页面(Global Pages)

🌐 什么是全局页面?

在 ASP.NET Web Pages 中,全局页面是特殊的 .cshtml 文件,它们在网站运行时自动执行,用于在页面加载前设置网站的通用行为。主要包括:

文件名执行时机用途
_AppStart.cshtml应用首次运行时设置全局变量、配置、初始化数据库连接等
_PageStart.cshtml每次页面执行之前设置 Layout、页面初始化等

🧭 _AppStart.cshtml:全站初始化配置

🔧 用途

  • 运行一次,仅在应用启动时调用
  • 设置站点级设置,如连接字符串、通用设置等

📄 示例

_AppStart.cshtml

@{
    // 定义全局变量
    WebSecurity.InitializeDatabaseConnection(
        connectionStringName: "DefaultConnection",
        userTableName: "Users",
        userIdColumn: "UserId",
        userNameColumn: "UserName",
        autoCreateTables: true
    );
}

  • 你可以用它初始化数据库、安全模块或自定义逻辑。

🧭 _PageStart.cshtml:页面级初始化设置

🔧 用途

  • 每个页面执行前自动运行
  • 通常用于设置页面默认 Layout、页眉或变量等

📄 示例

_PageStart.cshtml

@{
    Layout = "_Layout.cshtml";
}

  • 所有子页面默认使用该 Layout,除非在页面中重新设置。

📁 文件位置说明

  • 放在页面所在的文件夹中,每个文件夹可以有一个 _PageStart.cshtml
  • 子页面优先读取自身目录下的 _PageStart.cshtml,如果没有则向上查找。

⚙️ 执行流程(执行顺序)

页面执行前的调用顺序如下:

  1. _AppStart.cshtml(仅首次运行时)
  2. _PageStart.cshtml(每次请求)
  3. 目标页面自身的 Razor 代码

🧪 示例结构演示

/Site
  |_ _AppStart.cshtml
  |_ _PageStart.cshtml         # 设置全站 Layout
  |_ /Pages
      |_ _PageStart.cshtml     # 设置子布局
      |_ Index.cshtml
      |_ Contact.cshtml

  • /Pages/_PageStart.cshtml 将只影响该目录内的页面。
  • 根目录的 _PageStart.cshtml 用于设置全局默认 Layout。

🛑 注意事项

  • 文件名必须以 下划线开头_AppStart.cshtml 和 _PageStart.cshtml
  • 不能通过 URL 直接访问这两个页面(类似 App_Code)
  • 可使用条件逻辑决定是否应用 Layout
@{
    if (!Request.Url.AbsolutePath.Contains("Login")) {
        Layout = "_Layout.cshtml";
    }
}

🌐 出站链接推荐

📚 参考资料

  1. Microsoft Learn – Global Files in ASP.NET Web Pages
  2. 《ASP.NET Web Pages Unleashed》— 全局架构章节
  3. Stack Overflow – _AppStart.cshtml & _PageStart.cshtml 使用方法讨论