我经常使用 GridViews,有时我对在哪里放置某些代码感到困惑。触发事件(包括所有页面事件)的顺序是什么?
编辑: 我真的也想了解页面和 Gridview 之间发生了什么。事件是否交叉?还是所有页面事件同时发生然后所有 Gridview 事件发生?不只是 GridViews,任何控件 - 但主要是页面和 GridView 交互。
如果您指的是页面生命周期,您可以在此处找到概述。
生命周期总结如下:
页面请求
页面请求发生在页面生命周期开始之前。当用户请求页面时,ASP.NET 确定是否需要解析和编译页面(因此开始页面的生命周期),或者是否可以在不运行页面的情况下发送页面的缓存版本作为响应。
开始
在开始步骤中,设置请求和响应等页面属性。在这个阶段,页面还会判断请求是回发还是新请求,并设置 IsPostBack 属性。此外,在开始步骤中,设置了页面的 UICulture 属性。
页面初始化
在页面初始化期间,页面上的控件可用并且每个控件的 UniqueID 属性都被设置。任何主题也适用于页面。如果当前请求是回发,则回发数据尚未加载,控件属性值尚未恢复为视图状态的值。
加载
在加载期间,如果当前请求是回发,则控件属性会加载从视图状态和控件状态恢复的信息。
验证
在验证期间,将调用所有验证器控件的 Validate 方法,该方法设置各个验证器控件和页面的 IsValid 属性。
回发事件处理
如果请求是回发,则调用任何事件处理程序。
渲染
在渲染之前,会保存页面和所有控件的视图状态。在呈现阶段,页面为每个控件调用 Render 方法,提供一个文本编写器,将其输出写入页面的 Response 属性的 OutputStream。
卸下
在页面完全呈现、发送到客户端并准备好被丢弃后调用卸载。此时,页面属性(如 Response 和 Request)被卸载并执行任何清理。
至于 GridView 事件,可以在这里找到。
protected void GridView1_Load(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("GridView1_Load");
}
protected void GridView1_DataBinding(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("GridView1_DataBinding");
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("GridView1_DataBound");
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
System.Diagnostics.Debug.WriteLine("GridView1_RowDataBound");
}
http://msdn.microsoft.com/en-us/library/ms993231.aspx
Gridview 控件事件
ASP.NET 2.0 事件顺序中有一个更长的列表(注意这是针对 2.0 的)。