好的。讓我問的問題是這樣的: 一般地,不是頁面週期:回發問題
的Page_Load
的onclick和/或提交處理
的Page_Load。
如果是這樣,在onclick/submit處理程序期間頁面上的控件的值應該是什麼?用戶選擇的值,或來自page_load的值?
好的。讓我問的問題是這樣的: 一般地,不是頁面週期:回發問題
的Page_Load
的onclick和/或提交處理
的Page_Load。
如果是這樣,在onclick/submit處理程序期間頁面上的控件的值應該是什麼?用戶選擇的值,或來自page_load的值?
頁面加載事件觸發之前控制事件。因此,如果您在頁面加載事件中更改值,那麼這些更改將覆蓋用戶選擇的任何值,並且在控件事件中,您將看到在頁面加載中設置的值。
如果你需要做一些初始化的頁面加載事件,但只有當有人來的頁面,第一次,你可以使用的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還有更多的細節。
下面是一個簡單的例子序列:
發送回瀏覽器這要看。
請考慮以下示例 - 系統用戶有機會在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」,如用戶所期望的那樣。
也許我說錯了。頁面加載事件每次頁面加載時觸發是不是真的?即使在任何提交事件處理程序啓動後? IE: 1.用戶請求頁面(URL) 2. Web服務器處理頁面觸發Page_Load作爲該過程的一部分。 3.用戶與頁面上的表單進行交互,更改控件中的某些值。 4.用戶單擊某個按鈕或執行一些將頁面提交回服務器的操作。 5.服務器再次處理頁面(用戶更改等) 現在,page_load事件不會再次觸發嗎?而且,基本上開始整個過程? – john 2010-06-19 15:14:17
是的,每個HTTP請求(包括用戶操作引起的初始和每次回發)都會導致頁面加載事件觸發。如果您希望自己的行爲有所不同,IsPostBack會告訴您如何區分第一個請求和後續回發。 – 2010-06-19 15:43:51
ASP.NET有很長的事件列表,可以觸發併爲每個頁面請求執行特定的事情。請閱讀http://aspalliance.com/134 – Bill 2010-12-15 20:46:00