Sometimes we may need to know the source of postback. Our purpose of knowing the source may be like doing diverse activities depending which control or what type of control raised the postback. Inorder to identify the control that had raised the postback we can do something as simple as:
1. In the Page_Load event check whether its a postback or not-
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
lblControl.Text=GetPostBackControl(this);
}
}
2. Next we define the GetPostBackControl() method as below: -
public string GetPostBackControl(System.Web.UI.Page page)
{
Control ctrl1 = null;
Control ctrl2 = null;
string ctrlName = page.Request.Params["__EVENTTARGET"];
string ctrlStr = string.Empty;
if (ctrlName != null && ctrlName != String.Empty)
{
ctrl1 = page.FindControl(ctrlName);
}
else
{
foreach (string ctl in page.Request.Form)
{
if (ctl.EndsWith(".x") || ctl.EndsWith(".y"))
{
ctrlStr = ctl.Substring(0, ctl.Length - 2);
ctrl2 = page.FindControl(ctrlStr);
}
else
{
ctrl2 = page.FindControl(ctl);
}
if (ctrl2 is System.Web.UI.WebControls.Button || ctrl2 is System.Web.UI.WebControls.ImageButton)
{
ctrl1 = ctrl2;
break;
}
}
}
return ctrl1.ClientID;
}
To test the code -
- Place a number of controls that raises postback in a page.
- Place a label (lblControl in this code snippet) to display the control id that raised the postback.
- For the controls that need it set autopostback property to true.
Now test the code.