TabContainer抑制UpdatePanel的beginRequest和endRequest?

时间:2015-02-04 23:41:42

标签: javascript c# asp.net

我在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(客户端)
  4. 但是,当在TabContainer中使用其他控件时,我得到以下序列的断点:

    1. Page_Load(服务器端)
    2. TabContainer是否在某个地方处理这些事件?为什么他们没有发生?

1 个答案:

答案 0 :(得分:0)

在我创建的小型演示中发现这个之后,我开始研究我的香草演示和我的页面之间的差异。

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