欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解ASP.NET頁面生命周期事件

 更新時間:2013年07月25日 10:30:56   作者:  
這篇文章介紹了ASP.NET頁面生命周期事件,有需要的朋友可以參考一下

下面是ASP.NET頁面初始的過程:
1. Page_Init();
2. Load ViewState;
3. Load Postback data;
4. Page_Load();
5. Handle control events;
6. Page_PreRender();
7. Page_Render();
8. Unload event;
9. Dispose method called;

下面對其中的一些過程作下描述:
1. Page_Init();
這個過程主要是初始化控件,每次頁面載入執(zhí)行這個初始過程,包括第一次和以后的Postback(這里說下Postback,其實就可以簡單理解成用戶點擊SUBMIT按鈕之類的,把表單<Form>提交給服務(wù)器,這就是一次postback),在這里面可以訪問控件,但是這里面的控件值不是我們期待的控件里面的值,他只是一個控件的初始值(默認(rèn)值),舉例: 比如一個TextBox1,我們填入了”哈哈”,在點擊SUBMIT提交了頁面后,在Page_Init()里面,我們訪問到的TextBox1.Text不是我們的”哈哈”,而是開始的”"空字符串,如果TextBox1在我們設(shè)計的時候提供了默認(rèn)值,這里訪問到的也就是提供的默認(rèn)值,為什么呢,這就要看下一個過程了.

對應(yīng)的事件Page.Init

2. Load ViewState
這個過程是載入VIEWSTATE和Postback數(shù)據(jù),比如我們上面的TextBox1,這時就賦了”哈哈”,所以,在Post_Init()對控件賦值是無意義的,它都會在這個過程里被改寫,當(dāng)然第一次頁面載入例外,因為沒有VIEWSTATE數(shù)據(jù)。

沒有對應(yīng)的事件

3.Load Postback data;
上面說了,Postback可以理解成用戶提交表單數(shù)據(jù),所以這里就是處理表單數(shù)據(jù),當(dāng)然這里要設(shè)計到控件的設(shè)計,一般情況不會要我們自己處理這個過程,我們暫且略過. (在以前那篇關(guān)于ASP.NET頁面生命周期的簡單描述中,把這個過程和Load ViewState放在了一起,其實那是微軟提供的生命周期過程,這里單獨提出來是為了讓大家明白這是一個單獨的過程)

沒有對應(yīng)的事件
4. Page_Load();
這個過程也是每次頁面載入時一定會執(zhí)行的,但是注意和Page_Init的區(qū)別,上面已經(jīng)涉及了,這里注意的是一般都會用到Page.IsPostBack,該值指示該頁是否正為響應(yīng)客戶端回發(fā)而加載,或者它是否正被首次加載和訪問。

復(fù)制代碼 代碼如下:

private void Page_Load(object sender, System.EventArgs e)
{
  if(!Page.IsPostBack)
  {
    //第一次執(zhí)行的CODE HERE
  }
  else
  {
    //用戶提交FORM(即Postback)CODE HERE
  }

  //每次這里的都回執(zhí)行CODE HERE
}


對應(yīng)的事件Page.Load

5. Handle control events;
這個過程里,相應(yīng)具體的控件事件,比如private void ListBox1_SelectedIndexChanged(object sender, System.EventArgs e)事件等等

沒有對應(yīng)的事件(我們自己的事件函數(shù)都包括在這個過程里比如上面的ListBox1_SelectedIndexChanged)

6. Page_
預(yù)先呈遞對象,這里是在向用戶程序呈現(xiàn)數(shù)據(jù)的倒數(shù)第二步,我估計提供這個過程的意義,也就是在這里能對控件屬性等等要呈現(xiàn)給用戶的數(shù)據(jù)進行修改,這也是最后的修改,以前的修改(比如在Page_Init里面)都可能被覆蓋.做完這了還會進行一個操作就是保存狀態(tài),即SaveViewState.

對應(yīng)的事件時Page.PreRender

7. Page_Render();
大家可以在瀏纜器里View->Source查看到,每個頁面都有一個隱藏的<input>,這里面的”__VIEWSTATE”就是我們服務(wù)器寫回來的頁面狀態(tài)信息,在這個之前,服務(wù)器要呈現(xiàn)頁面(也就是構(gòu)造HTML格式的文件),就是從這個”__VIEWSTATE”里面獲取的數(shù)據(jù),當(dāng)然大家也注意到了,這里有個Page.Render事件,我們可以添加自己的處理代碼,也就是說我們又可以更改數(shù)據(jù),不過這里推薦不要在這里修改,既然提供了PreRender,就應(yīng)該在里面做最后的修改,當(dāng)然這不是必須的,只是推薦!

對應(yīng)的事件Page.Render

8. Unload event;
大家應(yīng)該明白,當(dāng)想服務(wù)器請求一個對象的時候,就會在內(nèi)存里生成一個繼承頁面對象,也就是頁面的類,它繼承自System.Web.UI.Page.
當(dāng)頁面對象從內(nèi)存中卸載時發(fā)生,將觸發(fā)該事件.

對應(yīng)的事件Page.Unload

9. Dispose method called;
銷毀所有的對象.當(dāng)從內(nèi)存釋放Page時發(fā)生,這是生存期的最后階段。可能第8和9似乎有些模糊,不過我也沒怎么搞清楚,待研究!

對應(yīng)的事件Dispose

以上就是ASP.NET頁面周期的描述。

注意上面灰色背景的文字,如果一個過程中有對應(yīng)的事件,我們可以自己定義一個函數(shù)(當(dāng)然先在MSDN中找到函數(shù)原型),然后在
InitializeComponent中向事件的鏈表上添加上去,像下面:

復(fù)制代碼 代碼如下:

private void InitializeComponent()
{  
  this.Unload += new System.EventHandler(this.MainWebForm_Unload);
  this.Load += new System.EventHandler(this.Page_Load);
  this.Init += new System.EventHandler(this.Page_Init);
  this.PreRender += new System.EventHandler(this.My_PreRender);
}

對于幾個沒有對應(yīng)事件的過程,比如2.Load ViewState,我們可以重載Page的虛函數(shù)protected override void LoadViewState(object savedState);來添加自己的控制代碼,不過切忌掉用基類的對應(yīng)方法,比如:
復(fù)制代碼 代碼如下:

protected override void LoadViewState(object savedState)
{
  //自己處理VIEWSTATE
  base.LoadViewState (savedState);
}

相關(guān)文章

  • C# Lambda表達式用途深入理解

    C# Lambda表達式用途深入理解

    假如我們想要從一個整型數(shù)組中取出其中是奇數(shù)的選項,其實現(xiàn)方式有很多,接下來通過三種方法的對比理解Lambda表達式的用途,需要了解的朋友可以參考下
    2012-12-12
  • WPF中在攝像頭視頻上疊加控件的解決方案

    WPF中在攝像頭視頻上疊加控件的解決方案

    前段時間,在一個wpf的項目中需要實時顯示ip攝像頭,對此的解決方案想必大家都應(yīng)該知道很多。今天小編給大家?guī)砹薟PF中在攝像頭視頻上疊加控件的解決方案,一起看看吧
    2017-04-04
  • asp.net 動態(tài)表單之?dāng)?shù)據(jù)分頁

    asp.net 動態(tài)表單之?dāng)?shù)據(jù)分頁

    我們很常會在項目中提到一個動態(tài)表單的概念,比如學(xué)校里面學(xué)生的考試成績,當(dāng)學(xué)生登錄系統(tǒng)的時候,他當(dāng)然是希望看到他自己所有科目的成績;又或者是班主任,他需要看到本班同學(xué)所有科目的成績;這些時候我們一般都會在頁面中呈現(xiàn)如下的效果。
    2010-03-03
  • asp.net XMLHttpRequest實現(xiàn)用戶注冊前的驗證

    asp.net XMLHttpRequest實現(xiàn)用戶注冊前的驗證

    用戶注冊前的驗證,提高用戶體驗。
    2009-10-10
  • asp.net(c#)動態(tài)修改webservice的地址和端口(動態(tài)修改配置文件)

    asp.net(c#)動態(tài)修改webservice的地址和端口(動態(tài)修改配置文件)

    這個問題其實并沒有我想像的那個復(fù)雜,我們都知道怎么直接修改吧,那就是修改WebConfig文件的配置節(jié)
    2012-12-12
  • ASP.NET入門之HTML服務(wù)器控件概述

    ASP.NET入門之HTML服務(wù)器控件概述

    這篇文章主要介紹了ASP.NET入門之HTML服務(wù)器控件,對于初學(xué)者來說很有借鑒學(xué)習(xí)價值,需要的朋友可以參考下
    2014-07-07
  • CheckBox控件默認(rèn)選中,提交時永遠獲得選中狀態(tài)的實現(xiàn)代碼

    CheckBox控件默認(rèn)選中,提交時永遠獲得選中狀態(tài)的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄狢heckBox控件默認(rèn)選中,提交時永遠獲得選中狀態(tài)的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 關(guān)于兩個自定義控件的取值問題及接口的應(yīng)用

    關(guān)于兩個自定義控件的取值問題及接口的應(yīng)用

    一個.aspx的頁面中,用到了兩個用戶控件,其中想做的到A控件有一個按鈕,點擊的時候獲取到B控件中的一個textbox的值想必大家會使用findcontrol獲取控件吧,而在生成的時候名字是不確定的,那么如何書寫呢?接下來為您提供詳細的解決方法,感興趣的朋友可以了解下啊
    2013-01-01
  • asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解

    asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解

    這篇文章主要給大家介紹了關(guān)于asp.net core下給網(wǎng)站做安全設(shè)置的相關(guān)資料,文章通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • GridView分頁的實現(xiàn)(通用分頁模板)

    GridView分頁的實現(xiàn)(通用分頁模板)

    要在GridView中加入AllowPaging=true,一頁數(shù)據(jù)多少行PageSize=10分頁時觸發(fā)的事件OnPageIndexChanging等等,感興趣的朋友可以了解下本文,希望對你有所幫助
    2013-04-04

最新評論