ASP.NET项目中MasterPage.master相关文件与脚本的加载顺序问题
ASP.NET母版页加载顺序问题
Links.aspx 基于 MasterPage.master 开发,针对以下两个问题解答:
A. 服务器端文件加载顺序
ASP.NET WebForms 中,母版页与内容页的服务器端加载/执行顺序为:
- Links.aspx:内容页的标记文件首先被解析,系统识别到母版页引用后,转向加载母版页
- MasterPage.master:母版页的标记文件完成加载解析
- MasterPage.master.cs:母版页后台代码初始化,触发
Page_Load事件,执行TodoA() - Links.aspx.cs:内容页后台代码初始化,触发
Page_Load事件,执行TodoB()
本质上对应WebForms的事件流程:内容页PreInit → 母版页初始化 → 母版页Page_Load → 内容页Page_Load,文件的加载逻辑完全贴合这个事件顺序。
B. 脚本与后台方法的执行顺序
这里要明确服务器端执行和客户端浏览器加载是两个独立阶段:
- 服务器端先完成所有后台代码执行,顺序为:
TodoA()→TodoB() - 服务器渲染完页面后,将HTML发送到客户端,浏览器按页面中脚本的出现顺序加载执行:
jquery-3.6.3.min.js→base.js
所以整体的完整顺序是:TodoA()(服务器端执行)→ TodoB()(服务器端执行)→ 浏览器加载执行jquery-3.6.3.min.js → 浏览器加载执行base.js
相关代码文件
MasterPage.master
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MasterPage.master.cs" Inherits="LinkTabs.MasterPage" %> <!DOCTYPE html> <html> <head runat="server"> <script type="text/javascript" src='jquery-3.6.3.min.js'></script> ... </html>
MasterPage.master.cs
namespace LinkTabs { public partial class MasterPage : System.Web.UI.MasterPage { protected void Page_Load(object sender, EventArgs e) { TodoA() } } }
Links.aspx
<%@ Page Title="Open A List Of URLs" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="Links.aspx.cs" Inherits="LinkTabs.Links" %> <%@ Import Namespace="LinkTabs.App_MyCode.BLL" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> <script src='~/Js/base.js'></script> ... </asp:Content>
Links.aspx.cs
namespace LinkTabs { public partial class Links : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TodoB() } } }
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

