Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

On postback, how can I check which control cause postback in Page_Init event

On postback, how can I check which control cause postback in Page_Init event.

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

Thanks

like image 995
Muhammad Akhtar Avatar asked Jul 04 '10 17:07

Muhammad Akhtar


People also ask

How do you know which control is caused by postback?

All controls accept Button and ImageButton use JavaScript for causing a postback. To enable postback on these controls one has to set AutoPostBack property to true. When you set this property to true, __doPostBack function is called on event which causes a postback.

What are postback events?

A Postback Event is a string of information that is sent to a network's specific URL that contains information about the post-install event pertinent to the network.

Is Page_Init called on postback?

Page_Init is definitely called on every page hit, postback or not, exactly the same as Page_Load .

What IsPostBack and postback AutoPostBack?

A postback is initiated by the browser, and reloads the whole page, usually when a control on the page (e.g. a button) is changed. With some controls (e.g. Checkboxes), you choose if changing the control should result in a postback. This property is called AutoPostback.


1 Answers

I see that there is already some great advice and methods suggest for how to get the post back control. However I found another web page (Mahesh blog) with a method to retrieve post back control ID.

I will post it here with a little modification, including making it an extension class. Hopefully it is more useful in that way.

/// <summary> /// Gets the ID of the post back control. ///  /// See: http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx /// </summary> /// <param name = "page">The page.</param> /// <returns></returns> 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): Type check for Button and ImageButton changed to look for IButtonControl to allow postbacks from third party controls to be recognized.

like image 87
J Pollack Avatar answered Oct 02 '22 19:10

J Pollack