2010-06-19 63 views
0

好的。讓我問的問題是這樣的: 一般地,不是頁面週期:回發問題

的Page_Load

的onclick和/或提交處理

的Page_Load。

如果是這樣,在onclick/submit處理程序期間頁面上的控件的值應該是什麼?用戶選擇的值,或來自page_load的值?

回答

2

頁面加載事件觸發之前控制事件。因此,如果您在頁面加載事件中更改值,那麼這些更改將覆蓋用戶選擇的任何值,並且在控件事件中,您將看到在頁面加載中設置的值。

如果你需要做一些初始化的頁面加載事件,但只有當有人來的頁面,第一次,你可以使用的IsPostBack:

if(!IsPostBack) 
{ 
    //do initialization that you only want to happen when someone 
    //comes to the page for the first time 
} 

這裏是一個很好overview of the ASP.NET page lifecycle還有更多的細節。

下面是一個簡單的例子序列:

  1. 瀏覽器請求的頁面
  2. 頁面加載火災
  3. 頁面呈現和被髮送到瀏覽器
  4. 用戶確實在網頁上的東西(點擊一個按鈕,更改設置爲自動回覆的文本框等)
  5. 瀏覽器對頁面進行POST POST
  6. 頁面加載觸發(再次)。這次IsPostBack是真的。另請注意,這與#2中的「頁面」對象不同。每個HTTP請求都是一個全新的Page對象。例如,成員變量不會跨請求保存。
  7. 適當控制火的事件(點擊,文字改變等)
  8. 頁面呈現,如果你檢查頁面是回發或不被再次
+0

也許我說錯了。頁面加載事件每次頁面加載時觸發是不是真的?即使在任何提交事件處理程序啓動後? IE: 1.用戶請求頁面(URL) 2. Web服務器處理頁面觸發Page_Load作爲該過程的一部分。 3.用戶與頁面上的表單進行交互,更改控件中的某些值。 4.用戶單擊某個按鈕或執行一些將頁面提交回服務器的操作。 5.服務器再次處理頁面(用戶更改等) 現在,page_load事件不會再次觸發嗎?而且,基本上開始整個過程​​? – john 2010-06-19 15:14:17

+0

是的,每個HTTP請求(包括用戶操作引起的初始和每次回發)都會導致頁面加載事件觸發。如果您希望自己的行爲有所不同,IsPostBack會告訴您如何區分第一個請求和後續回發。 – 2010-06-19 15:43:51

+0

ASP.NET有很長的事件列表,可以觸發併爲每個頁面請求執行特定的事情。請閱讀http://aspalliance.com/134 – Bill 2010-12-15 20:46:00

0

發送回瀏覽器這要看。

請考慮以下示例 - 系統用戶有機會在Web窗體上更改其名稱。加載頁面時,用戶名稱將顯示在文本框中的頁面上。用戶然後可以點擊一個按鈕來保存他們的名字。

在此示例中,讓我們假設名爲「John Smith」的用戶將其用戶名錯誤地存儲爲「John Jones」。然後,他決定通過在用戶名字段中輸入「John Smith」來更改他的用戶名。

protected void Page_Load(object sender, EventArgs e) 
{ 
this.txtName.Text = "John Jones"; 
} 

protected void SaveDetails(object sender, EventArgs e) 
{ 
string username = this.txtName.Text; 
} 

在這種情況下,您會希望將字符串username設置爲「John Smith」。 但是,當頁面在回發中再次加載時,它實際上重置爲「John Jones」。

因此我們必須檢查頁面是否是回發。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
    this.txtName.Text = "John Jones"; 
    } 
} 

現在,用戶名字符串將被設置爲「John Smith」,如用戶所期望的那樣。