1

我有这样的结构。

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

现在问题来了。

当我单击Button1时,它会导致UpdatePanel1刷新和调用CheckBoxCheckedHandel()方法。所以要么我想要一个导致回发的控件名称,要么我只想UpdatePanel2Button1单击时刷新。

我想说的另一件事是,我在两个更新面板上都显示了时间,以查看它们是否在发生某些事情时刷新。此时button1点击事件并没有刷新UpdatePanel1时间但仍然调用CheckBoxCheckedHandel()方法。

我在过去两天一直被这个问题困扰,请帮忙。

注意:UpdatePanel1 - updatemode - 有条件且无触发 UpdatePanel2 - updatemode - 有条件且 asp:asyncTriggre 用于 button1 点击事件

4

2 回答 2

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

于 2012-12-19T09:54:11.650 回答
0

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

var asyncPostBackSourceControl = Page.FindControl(scriptManager.AsyncPostBackSourceElementID)
于 2016-08-30T23:23:49.953 回答