1

ユーザーコントロールにツリービューがあります。すべての非同期ポストバックでjavascript関数を実行して、divを正しい位置にスクロールする必要があります。私はそれを機能させましたが、それを行うには「よりクリーンな」方法が必要だと思います。コントロールの Page_Load 関数には、次のコードがあります。それを行うより良い方法はありますか?

ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "key" + DateTime.Now.Ticks, "RestorePosition();", true);

この答えを探している人の利益のために、これが私が最終的にうまくいったことです。ascx ページの上部に、次のコードがあります。


<script type="text/javascript">
    function pageLoad(sender, args) {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SavePosition);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestorePosition);
    }

    function SavePosition(sender, args) {
        document.getElementById('hdnScrollSaver').value = document.getElementById('reportTreeViewdiv').scrollTop;
    } 
    function RestorePosition(sender, args) {
        document.getElementById('reportTreeViewdiv').scrollTop = document.getElementById('hdnScrollSaver').value;
    } 

</script>

次に、ツリービューを次のように div タグでラップしました。


<div class="reportTreeView" id="reportTreeViewdiv">
                    <asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate" 
                        OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" PathSeparator="|" SkinID="ReportTreeView" />
                </div>

これが誰かに役立つことを願っています。

4

3 に答える 3

4

Ajax は、ASP.Net ページに似たページ ライフ サイクルをクライアント側で提供します。したがって、pageLoad イベントでは、各開始要求と終了要求で呼び出される関数を結び付けることができます。

function pageLoad(sender, args) {
  Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
}

function beginRequest(sender, args) {
        // begin request code - i.e. make a "processing" div visible
}

function endRequest(sender, args) {
        // we are back
        RestorePosition(); 
}
于 2010-03-17T16:07:46.377 に答える
1

あなたはこれを正しくやっていると思います。ただし、一意のキーは削除します。

MSDNによると:

スクリプトをキーで識別することにより、複数のサーバー コントロール インスタンスがスクリプト ブロックを要求でき、出力ストリームにスクリプト ブロックが 2 回出力されることはありません。

同じキー パラメータ値を持つスクリプト ブロックはすべて重複と見なされます。

キーは、スクリプトが複数回作成されるのを防ぐために使用されるため、ケースで一意である必要はありません。

于 2010-03-17T16:11:45.023 に答える
1

これは「クリーン」な方法だと思います。ScriptManager を本来の使用方法で使用しています。

そのコード行の外観が気に入らない場合は、いつでも「スクリプト ユーティリティ」クラスなどにリファクタリングできます。私はしませんが、それは私だけです。

于 2010-03-17T14:52:23.973 に答える