2011-06-29 18 views
1

我以編程方式創建了2個按鈕。現在我想知道在頁面加載時按下哪一個按鈕....按鈕將觸發頁面加載事件,然後是它自己的事件。有沒有辦法知道在PageLoad事件中是否按下了一個控件?

在它激發自己的事件之前,我想知道頁面加載事件是否按下了哪個按鈕。

有沒有辦法找出答案?

我的按鈕都是這樣

Button btnMoveThread = new Button(); 
     btnMoveThread.Text = "1"; 
     btnMoveThread.Command += ModeratorButtonPassTo_Click; 

    Button btnMoveThread = new Button(); 
     btnMoveThread.Text = "2"; 
     btnMoveThread.Command += ModeratorButtonPassTo_Click; 

此功能不會工作:

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; 
    } 

回答

1

您可以通過識別哪個控件導致回發之前,它被稱爲事件處理程序確定這一點。例如

string sender = page.Request.Params.Get("__EVENTTARGET"); 
Response.Write(sender);   
+0

它不會在屏幕上打印任何東西。它是一個動態控制:例如,按鈕b =新的按鈕()...不是頁面上放置的按鈕..我將按鈕提供給頁面上的佔位符.. – Matrix001

+0

@Matrix沒問題。事件目標仍將包含導致回帖的原因。這取決於你想要用它做什麼。 –

+0

什麼都沒有打印在頁面上......自己測試 – Matrix001

0

ASP.NET回發的工作方式提交客戶端的形式與另外兩個值,__EVENTTARGET__EVENTARGUMENT。 ASP.NET使用這些來確定要找到哪個控件以及要觸發哪個事件。你可以這樣做:

if (IsPostBack) 
{ 
    string controlId = Request["__EVENTTARGET"]; 
    // Do something with the control Id. 
} 
+0

看看我上面添加的代碼 – Matrix001

0

您需要的崗位之前添加按鈕後面,這樣就可以得到這個職位,回來時對它們的訪問,可能是在頁面的INIT。我改變它,所以它會編譯並添加了ID屬性的按鈕:

Button btnMoveThread = new Button(); 
    btnMoveThread.Text = "1"; 
    btnMoveThread.ID = "Thread1"; 
    btnMoveThread.Command += ModeratorButtonPassTo_Click; 
    DivContent.Controls.Add(btnMoveThread); 

    Button btnMoveThread2 = new Button(); 
    btnMoveThread2.Text = "2"; 
    btnMoveThread2.ID = "Thread2"; 
    btnMoveThread2.Command += ModeratorButtonPassTo_Click; 
    DivContent.Controls.Add(btnMoveThread2); 

然後,在你的工作,你需要遍歷的request.form的鍵:

int KeyCount = page.Request.Form.AllKeys.Length; 
    for (int i = 0; i < KeyCount; i++) 
    { 
     if (page.Request.Form.AllKeys[i] == "Thread1") 
     { 
      return page.FindControl("Thread1"); 
     } 
     if (page.Request.Form.AllKeys[i] == "Thread2") 
     { 
      return page.FindControl("Thread2"); 
     } 
    } 

既然你在代碼中添加按鈕而不是在設計器中,find控件將爲null,除非在回發之前將它們添加回來,就像我在頁面的INIT中所建議的那樣。

相關問題