I have a treeview in a user control. I need to run a javascript function with every asynch postback to scroll the div it's in to the right position. I've got it working, but I think there has to be a "cleaner" way to do it. In the Page_Load function of the control, I have the following code. Is there a better way to do it?
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "key" + DateTime.Now.Ticks, "RestorePosition();", true);
For the benefit of anyone searching for this answer, here is what I finally did that worked. At the top of the ascx page, I have the following code:
<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>
And then I wrapped the treeview in a div tag as follows:
<div class="reportTreeView" id="reportTreeViewdiv">
<asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate"
OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" PathSeparator="|" SkinID="ReportTreeView" />
</div>
Hope this helps someone.