为什么在Asp.Net中的Page的Pre_Init事件中设置了母版页?

时间:2017-05-13 09:27:27

标签: c# asp.net

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

5 个答案:

答案 0 :(得分:1)

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

中应用的原因

答案 1 :(得分:1)

  

Masterpage没有PreInit方法。

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

母版页从Control类派生,如下面的层次结构所示:

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

因此,正如现在可以猜到的那样,Master页面的行为和实质上被视为一个控件,并且具有与其他asp.net服务器控件类似的事件

答案 2 :(得分:1)

因为所有的事情都是动态的'修改页面控件必须在那里发生。这是在没有请求的情况下重建页面(表单对象)的地方。在完成所有对象之后,会出现像page_load这样的事情。

Winforms比喻 - 如果你熟悉它 - page_init类似于New中的InitializeComponent(不是真的相同 - 只是类比)。

仅由于网络的性质(至少是服务器的往返),它可能不像winforms(或WPF,甚至是带有js / DOM UI和webapi后端的SPA网络应用程序) )所以必须重建表单的对象每个请求。

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

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

这是一张很好的图表,显示了... http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

alt text

注意在page_load之前如何将回发数据加载到控件中 - 这就是为什么在页面加载中做任何大事都为时已晚。你不可能从那里改变的用户那里得到任何回报(除非你直接回到回发数据)。图为ASP如何试图“假冒”。客户端/服务器Web架构上的事件驱动UI(例如,'事件相关逻辑'调用您的事件')。在客户端/服务器asp UI中没有这样的东西!

答案 3 :(得分:0)

由于母版页是应用程序的默认屏幕,因此应该首先在子页面之前初始化它。为了更早地进行初始化,它是在pre_init中完成的,其中主页面被加载。在Init()中所有的子页面将加载到该母版页。

答案 4 :(得分:0)

在ASP.NET页面生命周期中,初始化也包含在母版页中。这是在页面加载之前主页面上的设计和所有控件可用的位置,这将是页面生命周期的“加载”阶段。如果母版页未初始化,您将获得一个没有设计的页面,除了页面上的信息。

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

https://msdn.microsoft.com/en-us/library/ms178472.aspx