我有一段测试代码,以便了解事件处理程序的执行顺序。为什么序列是这样的?:
Button1_Init
Page_Init
Page_Load
Button1_Load
Page_PreRender
Button1_PreRender
Button1_Unload
Page_Unload
例如,为什么Button1_Init
在Page_Init
之前,Page_Load
在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)
{
}
}
答案 0 :(得分:0)
当所有控件初始化时,Page_Init会被触发,以确保在页面添加/使用它们之前初始化所有控件,否则将出现空引用。
此时间页面需要设置控件的各种属性,这就是首先触发页面加载然后按钮加载被触发的原因。
预呈现也是如此。
还有一个提示:userControl中的Preinit不可用。它仅在页面中可用,因为控件尚不存在。