找到在嵌套更新面板中导致回发的控件名称

时间:2012-12-19 09:48:44

标签: c# asp.net updatepanel

我有这样的结构。

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

现在问题就出现了。

当我点击Button1时,会导致UpdatePanel1刷新并调用CheckBoxCheckedHandel()方法。因此,我想要一个导致回发的控件名称,或者我想在UpdatePanel2点击时仅刷新Button1

我想说的另一件事是我在两个更新面板上显示时间,看看当事情发生时它们是否令人耳目一新。此时button1单击事件不会刷新UpdatePanel1时间,但仍会调用CheckBoxCheckedHandel()方法。

过去2天我遇到了这个问题,请帮忙。

注意: UpdatePanel1 - updatemode - 有条件且没有触发器 UpdatePanel2 - updatemode - 用于button1单击事件的条件和asp:asyncTriggre

2 个答案:

答案 0 :(得分:2)

以下是如何获取导致异步回发的控件的ID。在你的Page_Load处理程序中输入以下代码:

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

以下函数获取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存储在一个隐藏字段中,该名称是该页面的ScriptManager的ID。值以Script_Manager_ID|Control_ID

格式存储

答案 1 :(得分:0)

要获取导致异步回发的控件,您可以使用以下代码而不是解析

var asyncPostBackSourceControl = Page.FindControl(scriptManager.AsyncPostBackSourceElementID)