0

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

  1. Button1_Init
  2. Page_Init
  3. Page_Load
  4. Button1_Load
  5. Page_PreRender
  6. Button1_PreRender
  7. Button1_Unload
  8. Page_Unload

例如,为什么是Button1_Initbefore Page_Init,但是Page_Load是 before Button1_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)
        {

        }
    }
4

1 回答 1

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

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

预渲染也会发生同样的事情。

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

于 2013-01-07T11:31:52.803 回答