2011-06-20 21 views
2

投稿時にどのボタンがクリックされたかを知りたい。どのボタンがクリックされたかを知る方法

ユーザーがボタンをクリックすると、ポストバックになり、コントロールのClickイベントに移動します。

私がしたいのは、最初の段階でどのボタンがクリックされたかを調べることです。ポストバック段階中。

これを達成する方法はありますか?

ps。 C#コードのみ。それはasp.netの質問

+0

Matrix001、ちょうどあなたの用語を明確にするために、ユーザーがWebブラウザ上でアクションを行うときにポストバックがある(または自動化されたクライアント側のアクションが発生します) HTTP POST要求がサーバーに返されます。 「ポストバック段階」と呼ばれるものは、ポストバックイベント処理(ボタンクリックイベントなど)の前に発生するページライフサイクルの最初の数段階です。あなたが興味を持っているのは、 'Page.Load'のような以前のイベントを処理している間、今後のポストバックイベントに関する情報を得ることです。 – pseudocoder

+0

はい、私が望むのは、ユーザーが情報を要求するとすぐに、つまりボタンをクリックすると、起動されたコントロールのイベントのタイプ(または単にコントロールのID)を取得することです。どのボタンがクリックされたのかを知りたいのですが、それはボタンAまたはBだったのですが、私はPage.Loadイベントでそれを知りたいです。 – Matrix001

答えて

6

Formのコレクションは、このようなコード(恥知らずに盗まれたhere)でチェックできます。このようなPage_Load

public static System.Web.UI.Control GetPostBackControl(System.Web.UI.Page page) 
{ 
    Control control = null; 
    string ctrlname = page.Request.Params["__EVENTTARGET"]; 
    if (ctrlname != null && ctrlname != String.Empty) 
    { 
     control = page.FindControl(ctrlname); 
    } 
    // if __EVENTTARGET is null, the control is a button type and we need to 
    // iterate over the form collection to find it 
    else 
    { 
     string ctrlStr = String.Empty; 
     Control c = null; 
     foreach (string ctl in page.Request.Form) 
     { 
      // handle ImageButton controls ... 
      if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) 
      { 
       ctrlStr = ctl.Substring(0, ctl.Length - 2); 
       c = page.FindControl(ctrlStr); 
      } 
      else 
      { 
       c = page.FindControl(ctl); 
      } 
      if (c is System.Web.UI.WebControls.Button || 
         c is System.Web.UI.WebControls.ImageButton) 
      { 
       control = c; 
       break; 
      } 
     } 
    } 
    return control; 
} 

コールそれを:

Control controlThatCausedPostBack = GetPostBackControl(this); 
+0

現在のコンテキストにメソッドが存在しないことがわかります。私はこれをやった:System.Web.UI.Control cont = new Control(); cont = ControlGetPostBackControl(this); – Matrix001

+0

@ Matrix001:私はそれをテストした、それは治療を働く:) – Town

+0

どのように私のコードに入れて...それはそれが現在のコンテキストで存在しないと言うことはありません – Matrix001

0

あなたのウェブページ上でプライベート変数を使用してください。 OnClickハンドラでは、その変数の値をsender引数に設定します(ボタンまたはコントロールに型キャストする必要があります)。

+2

@ Matrix001の質問に対する答えではないと思います。彼は何か他のことを尋ねる。彼は尋ねる - ポストバック後に 'Page_Load'でボタンの名前を取得する方法。 –

+0

正確には名前はありませんが、押されていないボタンAであることを識別します。ボタンB – Matrix001

+0

wsanville。ポストバック段階でボタンの値を取得する必要があります。ボタンが後で発生するイベントを発生させるときではありません。ポストバックがあり、pageLoadイベントが発生するとすぐに。そのイベントでボタンAが押されたことを知りたいです。 – Matrix001

関連する問題