asp.net 控件生命周期和Global.asax事件顺序

来源:互联网 发布:淘宝达人可以开店吗 编辑:程序博客网 时间:2024/05/05 06:17
阶段 控件需要执行的操作 要重写的方法或事件 初始化 初始化在传入 Web 请求生命周期内所需的设置。请参见处理继承的事件。 Init 事件(OnInit 方法) 加载视图状态 在此阶段结束时,就会自动填充控件的 ViewState 属性,详见维护控件中的状态中的介绍。控件可以重写 LoadViewState 方法的默认实现,以自定义状态还原。 LoadViewState 方法 处理回发数据 处理传入窗体数据,并相应地更新属性。请参见处理回发数据。
注意   只有处理回发数据的控件参与此阶段。
LoadPostData 方法

(如果已实现 IPostBackDataHandler

加载 执行所有请求共有的操作,如设置数据库查询。此时,树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。请参见处理继承的事件。 Load 事件

OnLoad 方法)

发送回发更改通知 引发更改事件以响应当前和以前回发之间的状态更改。请参见处理回发数据。
注意   只有引发回发更改事件的控件参与此阶段。
RaisePostDataChangedEvent 方法

(如果已实现 IPostBackDataHandler

处理回发事件 处理引起回发的客户端事件,并在服务器上引发相应的事件。请参见捕获回发事件。
注意   只有处理回发事件的控件参与此阶段。
RaisePostBackEvent 方法

(如果已实现 IPostBackEventHandler

预呈现 在呈现输出之前执行任何更新。可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段所对的更改则会丢失。请参见处理继承的事件。 PreRender 事件

OnPreRender 方法)

保存状态 在此阶段后,自动将控件的 ViewState 属性保持到字符串对象中。此字符串对象被发送到客户端并作为隐藏变量发送回来。为了提高效率,控件可以重写 SaveViewState 方法以修改 ViewState 属性。请参见维护控件中的状态。 SaveViewState 方法 呈现 生成呈现给客户端的输出。请参见呈现 ASP.NET 服务器控件。 Render 方法 处置 执行销毁控件前的所有最终清理操作。在此阶段必须释放对昂贵资源的引用,如数据库链接。请参见 ASP.NET 服务器控件中的方法。 Dispose 方法 卸载 执行销毁控件前的所有最终清理操作。控件作者通常在 Dispose 中执行清除,而不处理此事件。 UnLoad

 使用举例:

IPostBackEventHandler 实现自定义的消息映射

public class ChildControl: WebControl, IPostBackEventHandler
{
//注册客户端JS
protected override void OnLoad(EventArgs e)
{
script.Append(
"</script> function test(){"));
script.Append(Page.GetPostBackClientEvent(
this"method1"));
                    script.Append(
"</script>");
Page.RegisterStartupScript(
this.ClientID + "_XXXX", script.ToString());
}

//针对自定义回传调用处理
        public void RaisePostBackEvent(string eventArgument)
        
{
            
if (eventArgument == "method1")
            
{
                
//do some thing for method1
            }
else if (eventArgument == "method2")
{
                                
//do some thing
}


        }

}

App_Web_np75z0lk.dll!_Default.Button1_Click(object sender = {Text = "Button"}, System.EventArgs e = {System.EventArgs}) Line 22    C#
System.Web.dll!System.Web.UI.WebControls.Button.OnClick(System.EventArgs e)
System.Web.dll!System.Web.UI.WebControls.Button.RaisePostBackEvent(string eventArgument)
System.Web.dll!System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl, string eventArgument)
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Collections.Specialized.NameValueCollection postData)
System.Web.dll!System.Web.UI.Page.ProcessRequestMain(bool includeStagesBeforeAsyncPoint = true, bool includeStagesAfterAsyncPoint = true)
System.Web.dll!System.Web.UI.Page.ProcessRequest(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint = true)
System.Web.dll!System.Web.UI.Page.ProcessRequest()
System.Web.dll!System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext context
System.Web.dll!System.Web.UI.Page.ProcessRequest(System.Web.HttpContext context)
App_Web_np75z0lk.dll!ASP.default_aspx.ProcessRequest(System.Web.HttpContext context = {System.Web.HttpContext}) + 0x2f bytes    C#
System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.CallHandlerExecutionStep}, ref bool completedSynchronously = true)
System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error)
System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData)
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr = {System.Web.Hosting.ISAPIWorkerRequestOutOfProc})
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr) + 0x62 bytes   
System.Web.dll!System.Web.Hosting.ISAPIRuntime.ProcessRequest(System.IntPtr ecb, int iWRType) + 0x57 bytes   

Global.asax 事件顺序

·Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication 对象实例,它都会被调用。
·Application_BeginRequest 
·Application_AuthenticateRequest 
·Application_AuthorizeRequest 
·Application_ResolveRequestCache 
·Application_AcquireRequestState 
·Application_PreRequestHandlerExecute 
·Application_PreSendRequestHeaders 
·Application_PreSendRequestContent 
·<<执行代码>> 
·Application_PostRequestHandlerExecute 
·Application_ReleaseRequestState 
·Application_UpdateRequestCache 
·Application_EndRequest