2012-04-30 6 views
4

私はデータベースにあるすべてのオブジェクトを持つテーブルを持っています。私はPage_Load関数でそれらをロードします。私はテキストフィールドとボタンをクリックすると、そのクリックのハンドラにdbのテキストフィールドに書かれた名前を持つ新しいオブジェクトを置くことが必要なボタンがあります。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個のif節を持つでしょう。 – Vadiklk

+0

本当に理解していない、あなたは1つだけを持っています:IsPostBack、trueの場合、OnLoadのコードをexcecuteしていたものは何でも、ボタンのクリックイベントはそのビジネスを行います。ボタンのクリックイベントはまだ起こるでしょう –

答えて

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の呼び出し)が含まれていると仮定しました。それは動作しません。また、表示されていないコントロールではプリレンダリングがトリガされません。 – jbl

+0

LoadData関数(Page_PreRender関数)でバインディングを行いますが、 – Vadiklk

1

あなたはイベントターゲットを確認し、その後、必要なものを行うことができます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     string eventTarget = Page.Request.Params["__EVENTTARGET"]; 
     if(whatever) 
     { 
      //do your logic here 
     } 
    } 
} 
たぶん

Get control name in Page_Load event which make the post back

0

Page_PreRenderCompleteイベントを使用して、テーブルを取得します。こうすることで、すべてのユーザーイベントが発生した後に、常に最新のデータがページに表示されます。

0

なぜ、クリックイベントの内容を新しいメソッドに移動しないでください。その後、そのメソッドをページロードの最初の行として呼び出しますか?

関連する問題