2017-04-11 4 views
0

多くのUpdatePanelコントロールとUpdateProgressコントロールを持つASP.NET Webフォームアプリケーションにいくつか変更を加えています。1つのUpdatePanelのUpdateProgressを無効にする

私はUpdatePanelを追加しましたが、このUpdatePanelに対してのみこのUpdatePanelが更新されると、すべてのUpdateProgressが表示されなくなります。

多くのUpdateProgressコントロールにはAssociatedUpdatePanelIDが設定されていないため、新しいUpdatePanelを更新すると表示されます。

AssociatedUpdatePanelIDが設定されていないUpdatePanelがUpdateProgressをトリガーしないようにする方法はありますか?おそらくいくつかのJavaScript?

私はここでいくつかの解決策を見つけましたが、UpdateProgressのIDを知っている必要があります。このアプリケーション全体では非常に多くのUpdateProgressがありますが、それぞれを指定する必要はありません。

答えて

0

私はさらに調査し、クライアント側の解決策を思いつきました。

このスクリプトは、UpdatePanelが関連付けられていない場合、および部分的なポストバックを引き起こしているUpdatePanelに少なくとも1つのUpdateProgressが関連付けられている場合、UpdateProgressコントロールの表示を無効にします。

短い説明:UpdatePanelに関連付けられたUpdateProgressコントロールがある場合、部分的なポストバックがトリガーされたときにのみ表示されます。

<script type="text/javascript"> 

    //array of original values 
    var updateProgressDefaults = []; 

    Sys.Application.add_init(appl_init); 

    function appl_init() { 

     var c = Sys.Application.getComponents(); 
     for (var i = 0; i < c.length; i++) { 
      if (Object.getType(c[i]).getName() == "Sys.UI._UpdateProgress" && !c[i]._associatedUpdatePanelId) { 
       updateProgressDefaults[c[i].get_id()] = c[i]._associatedUpdatePanelId; 
      }; 
     } 

     var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance(); 
     pgRegMgr.add_initializeRequest(BeginHandler); 
     pgRegMgr.add_endRequest(EndHandler); 
    } 

    function BeginHandler(sender, args) { 
     //There is no _updatePanelsToUpdate if a trigger is outside of an UpdatePanel 
     if (!args._updatePanelsToUpdate) return; 

     //Check if the affected UpdatePanel has an associated UpdateProgress control 
     var hasUpdateProgress = false; 

     var c = Sys.Application.getComponents(); 
     for (var i = 0; i < args._updatePanelsToUpdate.length; i++) { 
      for (var j = 0; j < c.length; j++) { 
       if (Object.getType(c[j]).getName() == "Sys.UI._UpdateProgress" && args._updatePanelsToUpdate[i].replace(/\$/g, "_") == c[j]._associatedUpdatePanelId) { 
        hasUpdateProgress = true; 
        break; 
       } 
      } 

      if (hasUpdateProgress) break; 
     } 

     //If the UpdatePanel has an associated UpdateProgress control then set all the UpdateProgress controls without associated UpdatePanels to a non-existant UpdatePanel 
     if (hasUpdateProgress) { 
      for (var i = 0; i < c.length; i++) { 
       var id = c[i].get_id(); 
       var type = Object.getType(c[i]).getName(); 
       if (type == "Sys.UI._UpdateProgress" && !c[i]._associatedUpdatePanelId) { 
        c[i]._associatedUpdatePanelId = "NullUpdateProgress"; 
       }; 

      } 
     } 
    } 

    //Restores AssociatedUpdatePanelId for all UpdateProgress controls 
    function EndHandler() { 
     for (var key in updateProgressDefaults) { 
      $get(key).control._associatedUpdatePanelId = updateProgressDefaults[key]; 
     } 
    } 
</script> 

出典:Disable common UpdateProgress controls for an UpdatePanel with an associated UpdateProgress

関連する問題