2012-07-04 6 views
5

Próbuję uzyskać moja głowa wokół kwestii strona cyklu życia w ASP.NET UserControl. To, co mam, to updatepanel z dwoma przyciskami. Teraz w evencie Page_Load muszę sprawdzić, który z dwóch przycisków został kliknięty.ASP.NET określić, który przycisk został kliknięty wewnątrz updatepanel w przypadku obciążenia strona

Wiem, że powinienem użyć zdarzenia kliknięcia, ale jest to przypadek złożonego cyklu stron z dynamicznie dodawanymi kontrolkami itd., Więc nie jest to opcja, niestety :-(

próbowałem sprawdzić wartości Request.Form["__EVENTTARGET"], ale ponieważ przyciski są wewnątrz UpdatePanel wartością jest pusty ciąg (przynajmniej myślę, że to dlatego, że jest pusta)

Więc bascially, czy istnieje sposób, aby sprawdzić, który przycisk został kliknięty w UpdatePanel, w przypadku Page_Load?

góry dzięki.

Wszystko co najlepsze,

Bo

Odpowiedz

9

można uzyskać identyfikator kontroli, który spowodował odświeżenie strony w przypadku Page_Load tą metodą.

protected void Page_Load(object sender, EventArgs e) 
    { 
      Textbox1.Text = getPostBackControlID();  
    } 

    private string getPostBackControlID() 
    { 
     Control control = null; 
     //first we will check the "__EVENTTARGET" because if post back made by  the controls 
     //which used "_doPostBack" function also available in Request.Form collection. 
     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 they having an additional "quasi-property" in their Id which identifies 
       //mouse x and y coordinates 
       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.ID; 
    } 
} 
+1

+1 ... Dobra odpowiedź, ale smutny jest tylko, że on tego nie zaakceptował ... –

Powiązane problemy