ユーザーコントロールにツリービューがあります。すべての非同期ポストバックで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>
これが誰かに役立つことを願っています。