2012-04-30 50 views
4

我有一個包含我的數據庫中所有對象的表。我將它們加載到我的Page_Load函數中。我有一個文本字段和一個按鈕,當單擊按鈕時,我希望該單擊的處理程序將一個新的對象與名稱寫入數據庫中的文本字段中。在page_load之前運行按鈕事件處理程序

現在,我希望點擊後發生的事情是頁面再次加載表中的新項目。問題是按鈕事件處理程序在Page_Load函數之後運行。

解決方法是在Page_Load中使用IsPostBack或使用預加載功能。一個問題是,如果我有3個不同的按鈕,我將不得不在他們之間有所不同,而不是有3個不同的方便的功能。

任何沒有這個問題的解決方案?

代碼:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Session["userId"] == null) 
       Response.Redirect("Login.aspx"); 

      // LOAD DATA FROM DB 
     } 

     protected void CreateObject(object sender, EventArgs e) 
     { 
      // SAVE THE NEW OBJECT 
     } 
+3

你不能在page_load之前有點擊事件,但我沒有看到如何通過使用IsPostBack解決這個問題? –

+0

這是,但如果我有12個按鈕電話怎麼辦?然後,我將有12個函數,而不是12個子句。 – Vadiklk

+0

真的不明白,你將只有一個如果:IsPostBack,如果真的不要在OnLoad中優先執行代碼,並且按鈕點擊事件將執行它的業務。按鈕點擊事件仍然會發生 –

回答

6

也許你應該嘗試的PreRender,而不是在加載過程中加載數據

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.PreRender += Page_PreRender 
     if (Session["userId"] == null) 
      Response.Redirect("Login.aspx"); 
    } 

    protected bool reloadNeeded {get; set;} 

    protected void CreateObject(object sender, EventArgs e) 
    { 
     // SAVE THE NEW OBJECT 
     reloadNeeded = true; 
    } 


    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     if(reloadNeeded || !IsPostBack) 
     // LOAD DATA FROM DB 
    } 
+0

我喜歡你的解決方案,但它似乎並沒有工作。它進入函數,但它不會顯示錶中的數據,即使是第一次。也許是因爲我打電話給Page_PreRender,LoadData? – Vadiklk

+0

@Vadiklk:沒有整個代碼很難回答。我假設「LOAD DATA FROM DB」還包含數據綁定部分(設置控件DataSource並調用DataBind)如果在Load期間仍然執行綁定的一部分。它不會工作。此外,prerender不會觸發不可見的控件。 – jbl

+0

我在我的LoadData函數中做了綁定(你的Page_PreRender函數) – Vadiklk

0

使用Page_PreRenderComplete事件檢索您的表。這樣,在所有用戶事件觸發後,您的頁面將始終具有最新的可用數據。

0

爲什麼不把你在click事件中的東西移動到新的方法中。然後調用該方法作爲頁面加載的第一行?

相關問題