65.9K
CodeProject is changing. Read more.
Home

How to know which control has raised a postback?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (3 votes)

May 19, 2010

CPOL
viewsIcon

10770

Identifying the control that raised postback event

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 -
  1. Place a number of controls that raises postback in a page.
  2. Place a label (lblControl in this code snippet) to display the control id that raised the postback.
  3. For the controls that need it set autopostback property to true.
Now test the code.