事件处理程序序列

时间:2013-01-06 09:33:36

标签: asp.net

我有一段测试代码,以便了解事件处理程序的执行顺序。为什么序列是这样的?:

  1. Button1_Init
  2. Page_Init
  3. Page_Load
  4. Button1_Load
  5. Page_PreRender
  6. Button1_PreRender
  7. Button1_Unload
  8. Page_Unload
  9. 例如,为什么Button1_InitPage_Init之前,Page_LoadButton1_Load之前?

    测试代码:

    public partial class WebForm1 : System.Web.UI.Page
        {
    
            protected void Page_Init(object sender, EventArgs e)
            {
    
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Page_PreRender(object sender, EventArgs e)
            {
    
            }
    
            protected void Page_Disposed(object sender, EventArgs e)
            {
    
            }
    
            protected void Page_Unload(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Init(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_PreRender(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Disposed(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Unload(object sender, EventArgs e)
            {
    
            }
        }
    

1 个答案:

答案 0 :(得分:0)

  1. 当所有控件初始化时,Page_Init会被触发,以确保在页面添加/使用它们之前初始化所有控件,否则将出现空引用。

  2. 此时间页面需要设置控件的各种属性,这就是首先触发页面加载然后按钮加载被触发的原因。

  3. 预呈现也是如此。

    还有一个提示:userControl中的Preinit不可用。它仅在页面中可用,因为控件尚不存在。