У меня есть древовидная структура в пользовательском элементе управления. Мне нужно запускать функцию 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>
Надеюсь, это кому-нибудь поможет.