patel.milanb
patel.milanb

Reputation: 5992

find control name which caused postback inside nested update panel

I have a structure like this.

   UpdatePanel1
     |    |
     | CheckBoxes - in code behind CheckBoxCheckedHandel() method
     | 
     |---Usercontrol1
              |
            UpdatePanel2
                |
               Button1

Now here is the problem.

When I click Button1, it is causing UpdatePanel1 to refresh and calling CheckBoxCheckedHandel() method. So either I want a control name which caused postback or I want to refresh only UpdatePanel2 when Button1 clicked.

One more thing I would like to say is I am displaying Time on both update panel to see if they are refreshing when something happens. At this time button1 click event does not refresh UpdatePanel1 time but still it calls CheckBoxCheckedHandel() method.

I am stuck with this issue from last 2 days, please help.

Notes: UpdatePanel1 - updatemode - Conditional and no triggres UpdatePanel2 - updatemode - Conditional and asp:asyncTriggre for button1 click event

Upvotes: 1

Views: 801

Answers (2)

an phu
an phu

Reputation: 1823

To get the control that caused the async postback, you can use the following instead of parsing

var asyncPostBackSourceControl = Page.FindControl(scriptManager.AsyncPostBackSourceElementID)

Upvotes: 0

Ivan Golović
Ivan Golović

Reputation: 8832

Here is how you can get the ID of a control that caused asynchronous postback. In your Page_Load handler put this code:

    if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
    {
        string id = Utils.GetAsyncPostBackControlID(Page, Page.Request);
    }

Following function gets the ID:

    public static string GetAsyncPostBackControlID(Page page, HttpRequest request)
    {
        string smUniqueId = ScriptManager.GetCurrent(page).UniqueID;
        string smFieldValue = request.Form[smUniqueId];

        if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains('|'))
            return smFieldValue.Split('|')[1];

        return String.Empty;
    }

ID of a control that caused postback is stored in a hiddenfield whose name is ID of a ScriptManager for the page. Value is stored in format: Script_Manager_ID|Control_ID

Upvotes: 2

Related Questions