0

ディレクトリ構造に基づいてツリービューにデータを入力する必要があるasp.netページがあります。ノードの作成中にユーザーに空白のページを見つめるのではなく、画像の読み込みにUpdateProgressを使用しようとしています。

インターネット上のさまざまなスレッドを検索することで、私が試したいくつかの異なることがわかりました。どちらにも、解決できないような独自の問題があります。

オプション1は、次のjavascriptを使用します。

function pageLoad() {
        __doPostBack('btnBuildTree', '');
    }

このイベントは自動配線されているため、body要素にonloadタグを追加する必要はありません。私のコードビハインドをテストするには、次のようになります。

protected void btnBuildTree_Click(object sender, EventArgs e)
     {
           System.Threading.Thread.Sleep(5000);
           // minor code here to know it did something
     }

このように設定すると、ページが読み込まれ、更新の進行状況が希望どおりに実行されます。btnBuildTree_Clickが終了すると、UpdatePanelが更新され、すぐに別のポストバックが開始され、javascript pageLoad()関数が起動されます。これにより、btnBuildTreeがポストバックします。

オプション2の変更点は1つだけで、それはjavascriptに対するものです。

function buildTree() {
    __doPostBack('btnBuildTree', '');
    }

そして、私はこのタグを追加します:

<body onload="buildTree()">

この設定では、ページが読み込まれ、btnBuildTree_Clickイベントが発生してすべての作業が実行されます。終了しても、別のポストバックが発生しないため、ループは発生しません。これの唯一の欠点は、UpdateProgressが表示されないため、「ロード画面」を提供しようとする目的全体が無効になることです。

私は単に何かが欠けていると信じており、誰かがそれが何であるかを指摘してくれることを願っています。

ありがとうございました!

4

2 に答える 2

0

pageLoad() 関数は、非同期ポストバックを含むすべてのポストバックに対して呼び出されます。pageLoad() 関数では、ツリービューが表示されているかどうかを伝えるロジックを追加できます。

ツリービューが表示された後に読み込みインジケーターを削除すると仮定すると、次のようなことができます。

function pageLoad() {
   var loading = $("#treeview-loading"); // Using jQuery to find the loading indicator.
   if (loading.get(0)) {
      __doPostBack('btnBuildTree', '');
   }
}
于 2011-06-29T21:47:14.617 に答える
0

ページロード用のjsをどのように追加していますか?

これがPage_Load使用時RegisterStartupScriptまたは!IsPostBack類似時に追加される場合は、btnBuildTree_Click イベントハンドラーが呼び出されるたびに自身を再追加しないようにチェックを追加します。

于 2011-06-29T20:48:41.840 に答える