C# 为什么在Asp.Net中页面的Pre_Init事件中设置母版页?

C# 为什么在Asp.Net中页面的Pre_Init事件中设置母版页?,c#,asp.net,C#,Asp.net,为什么在page_Init事件中设置母版页。我们在第页还有其他活动。 对我来说,一个原因可能是母版页并没有Pre_Init,另一个原因可能是页面的Init发生在母版页Init之前。如果我错了,请纠正我。母版页是一个用户控件。在Page.Init事件期间,页面上的所有控件都被初始化(调用Control.Init)。这就是为什么需要在page.PreInit中应用母版页 母版页没有PreInit方法 母版页继承:**System.Web.UI.MasterPage**并且根据该母版页类的设计,没有为

为什么在page_Init事件中设置母版页。我们在第页还有其他活动。
对我来说,一个原因可能是母版页并没有Pre_Init,另一个原因可能是页面的Init发生在母版页Init之前。如果我错了,请纠正我。

母版页是一个用户控件。在Page.Init事件期间,页面上的所有控件都被初始化(调用Control.Init)。这就是为什么需要在page.PreInit中应用母版页

母版页没有PreInit方法

母版页继承:
**System.Web.UI.MasterPage**
并且根据该
母版页
类的设计,没有为该类定义这样的
PreInit
事件

母版页派生自控件类,如以下层次结构所示:

System.Object
  System.Web.UI.Control
    System.Web.UI.TemplateControl
      System.Web.UI.UserControl
        System.Web.UI.MasterPage

因此,正如现在可以猜测的那样,母版页的行为和本质上被视为控件,并且具有类似于其他asp.net服务器控件的事件,因为所有“动态”修改页面控件的事情都必须发生在那里。这是在不发出请求的情况下重建页面(表单对象)的地方。然后,在创建所有对象之后,就会发生页面加载之类的事情

Winforms类比-如果您熟悉它-page_init类似于新版本中的InitializeComponent(不完全相同-请进行类比)

仅由于web的性质(至少是往返于服务器),它不可能像winforms(或WPF,甚至是带有js/DOM UI和webapi后端的SPA web应用程序)那样工作,因此必须在每次请求时重建表单的对象

为什么只有页面有PAGE_init而没有母版页?正如prateek所说,但除此之外,页面的重建必须从一个点进行控制。只有一个请求。控件也可以初始化,因为页面初始化进程依次调用它们

你问了一个答案复杂的问题

这是一张很好的图表,显示了正在发生的事情。。。


注意回发数据是如何在页面加载之前加载到控件中的——这就是为什么在页面加载中做任何大的事情都为时已晚的原因。您无法从在那里更改的用户那里获取任何信息(除非您直接转到回发数据)。图中显示了ASP如何在客户机/服务器web架构上“伪造”事件驱动的UI(例如,“事件相关逻辑”调用“事件”)。在客户端/服务器asp UI中没有这样的东西

由于母版页是整个应用程序的默认屏幕,因此应首先在子页之前对其进行初始化。为了更早地进行初始化,应在加载母版页的pre_init中进行初始化。稍后在init()中加载与该母版页相关的所有子页。

在ASP.NET页面生命周期中,母版页上还包括初始化。在加载页面之前,母版页上的设计和所有控件都将可用,这将是页面生命周期的“加载”阶段。如果母版页未初始化,则会得到一个没有设计的页面,页面上的信息除外

在页面初始化期间,页面上的控件可用,并且每个控件的UniqueID属性都已设置。如果适用,母版页和主题也将应用于页面。如果当前请求是回发,则回发数据尚未加载,控件属性值也未从视图状态还原为值


你的问题是什么?我只想知道在Pre_Init中设置母版页的原因是什么?