2017-05-16 12 views
0

私はaspxウェブフォームを持っています。このフォームにはコントロールと送信ボタンがあります。WebフォームのPage_Loadとボタンクリックを使用することはできますか?

  • ページのPage_Loadイベントでは、データでコントロールを埋めます。
  • ボタンクリックイベントでは、データベースにフォームデータを保存し、Response.Redirectを使用して別のページにリダイレクトする必要があります。

テスト中、ボタンをクリックするとPage_Load eventが呼び出されることがわかりました。 Page_Loadイベントのみを使用してコントロールに入力し、データを保存し、ボタンのクリックを使用することはできませんか?

答えて

2

はい、あなたはポストバックが発生します唯一のコントロールがある絶対に確信していると、ボタンのクリックイベントに行くべきコードを追加するIsPostBackフラグを付けてちょうどPage_Loadを使用することができます。

ポストバック(ボタン、ラジオボタン、ドロップダウンなど)を引き起こす可能性のあるコントロールが複数ある場合は、別のロジックを持つコントロールごとに別々のイベントハンドラが必要です。ポスト戻るPageLoadイベント。

あなたのケースでは、ちょうどボタンを使って、Page_LoadのコードをIsPostBackでチェックしても問題ありません。

クリックイベントハンドラ自体にボタンクリックイベントロジックがあることをお勧めします。そうすれば、IsPostBackチェックをする必要はありません。コードもきれいに見えます。

protected void Page_Load(object sender, EventArgs e) 
    { 
     FillControls(); 
     if (IsPostBack) //Will work. But can get executed for postback caused by any other control 
     { 
      SaveToDB(); 
      Response.Redirect("URL"); 
     }    
    } 

    protected void Btn_Click(object sender, EventArgs e) 
    { 
     //Assurance that this code will execute only for PostBack caused by Button. 
     SaveToDB(); 
     Response.Redirect("URL"); 
    } 
2

はい、できますが、あなたがイベントを使用していけない場合、クリーンコード のためのイベントをクリックし使用することをお勧めします、あなたが追加する複数のボタンを持っている場合は、

if(IsPostBack) 
{ 
    //do something 
} 

BUでこれを行うことができます各ボタン

if (IsPostBack) 
{ 
     string target = Request.Params["__EVENTTARGET"].ToString(); 
     if (target == "send") 
     { 
      //do something 
     } 
     if (target == "update") 
     { 
      //do something 
     } 
    } 
1

をPage_Loadのための条件は、あなただけのIsPostBackプロパティ

01のチェックを追加できますが、その実行を除外することはできませんページのライフサイクルの一部であります
if(!IsPostBack) 
{ 
//Add Your Page Load Code Here 
} 
関連する問題