2010-08-18 38 views
3

我有一個webform的問題。Button首先提交調用Onload!

我的目標:當頁面加載時,它必須加載每個文本框爲空。填充信息並點擊提交後,它必須得到提交(UpdatePaymentInfo())

問題:這裏,當用戶填寫的信息並點擊提交,它調用的onload功能,甚至之前提交按鈕,使所有文本框爲空。

下面是代碼:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    string QueryStringupdatecreditcard1 = Request.QueryString.ToString(); 

    if (String.Equals(QueryStringupdatecreditcard1, "tabID=B")) 
    { 
     divTitle.Visible = false; 
     trmain.Visible = false; 
     tdOrderSummary.Visible = false; 
     trCCandBilling.Visible = true; 
     trtest2.Visible = false; 
     divUpdatecreditcard.Visible = true; 
     trusecompaddress.Visible = false; 

     txtFirstName.Text = ""; 
     txtLastName.Text = ""; 
     txtAddress1.Text = ""; 
     txtAddress2.Text = ""; 
     txtCity.Text = ""; 
     txtZip.Text = ""; 
     txtCardNo.Text = ""; 
     txtVccNumber.Text = ""; 
     trAmountCharged.Visible = false; 
    } 
} 

protected void imgbtnSubmit_Click(object sender, ImageClickEventArgs e) 
{ 
    try 
    { 
     UpdatePaymentInfo(); 
    } 
} 
+1

歡迎的網頁形式的刺激性世界:)有時退房ASP .NET MVC實現的,它使比網頁表單更有意義。 (我評論而不是回答,因爲已經有很多答案,所有這些都說明了將條件包裝在條件中並假裝沒問題的推薦「解決方案」。) – David 2010-08-18 12:07:03

回答

9

包裝你的OnLoad方法的當前內容:

if (!Page.IsPostBack) 
{ 
    // Code in here will only be executed when the page is *not* being loaded by a postback 
} 

這是因爲,按照ASP.NET Page Life Cyle,您在此關心的事情實例按此順序發生:

加載 - 在加載期間,如果當前請求是回發,則控制 屬性加載有從視圖狀態恢復的信息 和控制 狀態。

回發事件處理 - 如果請求是回發,則調用控制事件 處理程序。之後,調用所有驗證程序 控件的驗證方法,該驗證程序設置驗證程序控件和頁面的個人 的IsValid屬性。

所以會發生什麼是(有些簡化):

  1. 你點擊圖像按鈕,觸發回發。
  2. 將表單中的數據加載到您的控件中。
  3. 您的OnLoad方法會覆蓋控件中的值以清除它們。
  4. 您的點擊處理程序已運行,但由於第3步看到空值。

正如其他人排序中提到,它不一定是重構你的OnLoad方法,而你這樣做是一件壞事。此刻的你似乎都在做兩件不同的事情:

  • 清除文本字段
  • 設置領域

的知名度這可能是值得這個分成一個或兩個(視如果可見性設置和字段清除將獨立完成)單獨的方法並調整您的OnLoad方法,使其看起來像這樣:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    if (!Page.IsInPostBack) 
    { 
     SetFieldVisibility(); 
     ClearFields(); 
    } 
} 
+2

+1可以超越答案。 – David 2010-08-18 12:04:32

+0

謝謝Rob!神奇! – Ram 2010-08-18 13:05:19

1

您可以使用012頁面的特性如下:

protected override void OnLoad(EventArgs e) { 
    if (!Page.IsPostBack) { 
    EmptyTextBoxes(); 
    } 
} 
1

您是否嘗試過在包裹檢查的形式復位代碼,看看如果頁面是回發?

if(!Page.IsPostback) { 
    // Do form reset here 
} 
3

Page_Load總是發生。

見關於Page Lifecycle

你需要做的是檢查,看看是否在Page_Load正被觸發回發什麼文件。

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     ///do stuff in here that you want to occur only on the first lad. 
    } 
    else 
    } 
     // code that you want to execute only if this IS a postback here. 
    { 

} 

// do stuff you want to do on Page_Load regardless of postback here. 
} 
+0

+1(從reciprocaton時間=),提及頁面生命週期,它促使我添加它,再加上相關位和一個「步行」到我的答案=) – Rob 2010-08-18 12:08:58

+0

你也有一個小的錯字就在你的代碼片段之上。=) – Rob 2010-08-18 12:14:35

+0

謝謝。它是固定的。 – David 2010-08-18 13:13:31

1

您是否想過使用IsPostBack頁面變量?

protected override void OnLoad(EventArgs e) 
{ 
    if(!IsPostBack){ 
     //all your logic here. 
    } 
} 
0

,如果是這種情況,您可以使用數據綁定控件並將其設置爲插入模式