No postback, como posso verificar qual controle causa postback no evento Page_Init

No postback, como posso verificar qual controle causa o postback no evento Page_Init.

protected void Page_Init(object sender, EventArgs e) { //need to check here which control cause postback? } 

obrigado

Vejo que já existem alguns ótimos conselhos e methods para saber como obter o controle pós-retorno. No entanto, encontrei outra página da web ( blog Mahesh ) com um método para recuperar o código de controle de pós-retorno.

Vou postar aqui com uma pequena modificação, inclusive fazendo dela uma class de extensão. Espero que seja mais útil dessa forma.

 ///  /// Gets the ID of the post back control. /// /// See: http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx ///  /// The page. ///  public static string GetPostBackControlId(this Page page) { if (!page.IsPostBack) return string.Empty; 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 controlName = page.Request.Params["__EVENTTARGET"]; if (!String.IsNullOrEmpty(controlName)) { control = page.FindControl(controlName); } else { // if __EVENTTARGET is null, the control is a button type and we need to // iterate over the form collection to find it // ReSharper disable TooWideLocalVariableScope string controlId; Control foundControl; // ReSharper restore TooWideLocalVariableScope 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")) { controlId = ctl.Substring(0, ctl.Length - 2); foundControl = page.FindControl(controlId); } else { foundControl = page.FindControl(ctl); } if (!(foundControl is IButtonControl)) continue; control = foundControl; break; } } return control == null ? String.Empty : control.ID; } 

Update (2016-07-22): A verificação de tipo para Button e ImageButton alterada para procurar IButtonControl para permitir que postbacks de controles de terceiros sejam reconhecidos.

Aqui está um código que pode fazer o truque para você (tirado do blog de Ryan Farley )

 public static Control GetPostBackControl(Page page) { Control control = null; string ctrlname = page.Request.Params.Get("__EVENTTARGET"); if (ctrlname != null && ctrlname != string.Empty) { control = page.FindControl(ctrlname); } else { foreach (string ctl in page.Request.Form) { Control c = page.FindControl(ctl); if (c is System.Web.UI.WebControls.Button) { control = c; break; } } } return control; } 

Diretamente em parâmetros de formulário ou

 string controlName = this.Request.Params.Get("__EVENTTARGET"); 

Editar : para verificar se um controle causou um postback (manualmente):

 // input Image with name="imageName" if (this.Request["imageName"+".x"] != null) ...;//caused postBack // Other input with name="name" if (this.Request["name"] != null) ...;//caused postBack 

Você também pode percorrer todos os controles e verificar se um deles causou um postBack usando o código acima.

Se você precisa verificar qual controle causou o postback, então você pode comparar diretamente ["__EVENTTARGET"] com o controle de seu interesse:

 if (specialControl.UniqueID == Page.Request.Params["__EVENTTARGET"]) { /*do special stuff*/ } 

Isso pressupõe que você estará comparando o resultado de qualquer método de extensão GetPostBackControl(...) . Pode não lidar com todas as situações, mas se funcionar, é mais simples. Além disso, você não vai vasculhar a página procurando por um controle que você não se importava em começar.

 if (Request.Params["__EVENTTARGET"] != null) { if (Request.Params["__EVENTTARGET"].ToString().Contains("myControlID")) { DoWhateverYouWant(); } } 

Supondo que seja um controle de servidor, você pode usar Request["ButtonName"]

Para ver se um botão específico foi clicado: if (Request["ButtonName"] != null)

Além das respostas anteriores, para usar Request.Params["__EVENTTARGET"] você precisa definir a opção:

 buttonName.UseSubmitBehavior = false; 

Para obter o nome exato do controle, use:

  string controlName = Page.FindControl(Page.Request.Params["__EVENTTARGET"]).ID;