TabContainer正在抑制UpdatePanel的beginRequest和endRequest

TabContainer suppressing beginRequest and endRequest of UpdatePanel?

本文关键字:beginRequest endRequest UpdatePanel TabContainer      更新时间:2023-09-26

我在TabContainer中有一些控件,TabContainer在UpdatePanel中。我正试图用以下javascript恢复TabContainer内部面板的滚动位置:

var yPanel;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
    yPanel = $get('ScrollPanel').scrollTop;
}
function EndRequestHandler(sender, args) {
    $get('ScrollPanel').scrollTop = yPanel;
}

在Chrome中在这些控件上设置断点,我看到当TabContainer外部(和UpdatePanel内部)的控件激活回发时会触发BeginRequestHandlerEndRequestHandler,当按下TabContainer内部的按钮时会触发断点。但是,TabContainer中的任何其他控件(例如带有AutoPostBack="true"的复选框)都会触发回发,但BeginRequestHandlerEndRequestHandler事件是而不是触发的。

我还将调试器连接到服务器上,并能够确认,当使用TabContainer外部的控件或TabContainer内部的按钮时,我得到了以下断点序列:

  1. BeginRequestHandler(客户端)
  2. Page_Load(服务器端)
  3. EndRequestHandler(客户端)

然而,当在TabContainer中使用其他控件时,我会得到以下断点序列:

  1. Page_Load(服务器端)

TabContainer是否在某个地方单独处理这些事件?为什么它们没有发生?

在我创建的一个小演示中发现这一点后,我开始计算我的香草演示和我的页面之间的差异。

导致这些事件未触发的关键区别,实际上也是导致这些事件不触发的区别,是在TabContainer及其选项卡上使用了ClientIDMode="Static"。不幸的是,我不知道为什么ClientID是静态的会导致这个问题,但如果将来有人遇到类似的问题,这就是你想要注意的。只需将ClientIDMode更改为默认的InheritAutoID,即可再次执行此操作并引发事件。