asp.net c#在updatepanel中支持滚动条记忆功能

在非ajax页面中,只要在page上设置 MaintainScrollPositionOnPostback="true" 即可进行记忆滚动条位置.

但是在ajax中,这个功能却不能正确工作了,那么我们应当如何让div自动维护滚动条位置呢?


首先在页面上增加 asp:panel控件 ,然后在aspx.cs后台 加入以下方法:


/// <summary> /// 记住panel的滚动条位置 /// </summary> /// <param name="panel" />panel控件实例 /// <param name="updatePanel" />ajax更新区域,可以为null,如果为null则执行非ajax逻辑,非ajax逻辑建议直接设置page的MaintainScrollPositionOnPostBack属性 protected void DoMaintainScrollPosition(Panel panel,UpdatePanel updatePanel=null) { StringBuilder sb = new StringBuilder(); sb.AppendLine(@"function Panel_SaveScrollPosition(PanelID){ if(document.getElementById(PanelID)!=null){ document.getElementById(PanelID+'_ScrollPosX').value = document.getElementById(PanelID).scrollLeft; document.getElementById(PanelID+'_ScrollPosY').value = document.getElementById(PanelID).scrollTop;}} function Panel_RestoreScrollPosition(PanelID){ if(document.getElementById(PanelID)!=null){ document.getElementById(PanelID).scrollLeft = document.getElementById(PanelID+'_ScrollPosX').value; document.getElementById(PanelID).scrollTop = document.getElementById(PanelID+'_ScrollPosY').value;}}"); HiddenField x = new HiddenField(); x.ID = panel.ClientID + "_ScrollPosX"; x.ClientIDMode = panel.ClientIDMode; panel. Controls.Add(x); HiddenField y = new HiddenField(); y.ID = panel.ClientID + "_ScrollPosY"; y.ClientIDMode = panel.ClientIDMode; panel. Controls.Add(y); string sScript = "Panel_SaveScrollPosition('" + panel.ClientID + "');"; if (updatePanel == null) { Page.ClientScript.RegisterClientScriptBlock(panel.GetType(), "PanelScrollFunction", sb.ToString(), true); Page.ClientScript.RegisterOnSubmitStatement(panel.GetType(), panel.ID + "_SavePanelScroll", sScript); } else { ScriptManager.RegisterClientScriptBlock(updatePanel, panel.GetType(), "PanelScrollFunction", sb.ToString(), true); ScriptManager.RegisterOnSubmitStatement(updatePanel, panel.GetType(), panel.ID + "_SavePanelScroll", sScript); } if (Page.IsPostBack) { x.Value = Page.Request.Form[x.ClientID]; y.Value = Page.Request.Form[y.ClientID]; sScript = "Panel_RestoreScrollPosition('" + panel.ClientID + "');"; if (updatePanel == null) { Page.ClientScript.RegisterStartupScript(panel.GetType(), panel.ID + "_SetPanelScroll", sScript, true); } else { ScriptManager.RegisterStartupScript(updatePanel, panel.GetType(), panel.ID + "_SetPanelScroll", sScript, true); } } }


通过以下方法在aspx.cs调用即可


protected void Page_Load(object sender, EventArgs e) { DoMaintainScrollPositionForAjax(Panel1,UpdatePanel1); }


你可能感兴趣的:(asp.net c#在updatepanel中支持滚动条记忆功能)