如何获取即将开始回发的Updatepanel的id

时间:2011-08-10 03:36:31

标签: asp.net ajax updatepanel

我需要得到即将开始回发的面板的id,所以我有一个通用的方法来阻止这个面板上的ui。

到目前为止,我有这个功能:

function BeginRequestHandler(sender, args) {
    $('#' + args.get_updatePanelsToUpdate()[0]).block({ message: null }); 
}
像这样附上:

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);

如果导致部分回发的控件在更新面板内部,但是如果它在外面(使用触发器),args.get_updatePanelsToUpdate()始终为null

我见过this回答,但是因为函数在部分回发完成后被触发,所以它不会起作用,我之前需要它...

谢谢

2 个答案:

答案 0 :(得分:2)

所以这就是我所做的:

创建了两个函数来阻止(在部分回发开始时)和解除阻塞(在部分回发结束时):

    function BeginRequestHandler(sender, args) {
          $('#' +sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).block({ message: 'loading...' }); 
    }
    function EndRequestHandler(sender, args) {        
          $('#' + sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).unblock();
    }

在我的脚本管理员之后在我的页面上注册了以上函数:

  <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    </script>

某些条件:

  • 我正在使用jquery UI block plugin,但您应该使用更符合您需求的内容。
  • 如果使用.NET 4.0 +
  • ,则更新面板应具有ClientIDMode =“AutoID”
  • 我使用了以下帮助函数导致js没有真正替换所有并处理asp net autoID:

    String.prototype.ReplaceAll = function(stringToFind,stringToReplace){     var temp = this;     var index = temp.indexOf(stringToFind);     while(index!= -1){         temp = temp.replace(stringToFind,stringToReplace);         index = temp.indexOf(stringToFind);     }     回温; }

答案 1 :(得分:0)

如果您只想禁用(或以其他方式设置动画)UpdatePanel,为什么不使用UpdatePanelAnimation?它为您提供以下钩子(不确定这是否是正确的词):

  

OnUpdating - 在任何UpdatePanel开始时播放的通用动画   更新
   OnUpdated - 在UpdatePanel之后播放的通用动画   已完成更新(但仅当UpdatePanel已更改时)