2012-07-04 16 views
5

Estoy tratando de entender mi problema de ciclo de vida de un ASP.NET UserControl. Lo que tengo es un panel de actualización con dos botones. Ahora, en el evento Page_Load, necesito hacer una comprobación para ver en cuál de los dos botones se hizo clic.ASP.NET determinar en qué botón se hizo clic dentro de un panel de actualización en el evento de carga de página

Sé que debería usar el evento click para esto, pero este es un caso de un ciclo de página bastante complejo con controles añadidos dinámicamente, etc., así que no es una opción, lamentablemente :-(

he tratado de comprobar el valor Request.Form["__EVENTTARGET"], pero ya que los botones dentro de un UpdatePanel el valor es una cadena vacía (al menos yo supongo que por eso está vacía)

Así Bascially, ¿hay alguna forma de comprobar qué botón se hizo clic en un UpdatePanel, en el evento Page_Load?

Gracias de antemano.

Todo lo mejor,

Bo

Respuesta

9

Puede obtener ID de control que causó la devolución de datos en el evento Page_Load por este método.

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 ... Buena respuesta, pero lo único triste es que aún no lo aceptó ... –

Cuestiones relacionadas