(服务器端的代码的实现)当页面上的某个控件回发时,保持滚动条位置的。
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
public partial class Email_Default : System.Web.UI.Page
{
private bool _useScrollPersistence = true;
/// <summary>
/// There could be PostBack senarios where we do not want to remember the scroll position. Set this property to false
/// if you would like the page to forget the current scroll position
/// </summary>
public bool UseScrollPersistence
{
get { return this._useScrollPersistence; }
set { this._useScrollPersistence = value; }
}
private string _bodyID;
/// <summary>
/// Some pages might already have the ID attribute set for the body tag. Setting this property will not render the ID or change
/// the existing value. It will simply update the javascript written out to the browser.
/// </summary>
public string BodyID
{
get { return this._bodyID; }
set { this._bodyID = value; }
}
//Last chance. Do we want to maintain the current scroll position
protected override void OnPreRender(EventArgs e)
{
if (UseScrollPersistence)
{
RetainScrollPosition();
}
base.OnPreRender(e);
}
protected override void Render(HtmlTextWriter writer)
{
//No need processing the HTML if the user does not want to maintain scroll position or already has
//set the body ID value
if (UseScrollPersistence && BodyID == null)
{
TextWriter tempWriter = new StringWriter();
base.Render(new HtmlTextWriter(tempWriter));
writer.Write(Regex.Replace(tempWriter.ToString(), "<body", "<body id=\"thebody\" ", RegexOptions.IgnoreCase));
}
else
{
base.Render(writer);
}
}
private static string saveScrollPosition = "<script language='javascript'>function saveScrollPosition() {{document.forms[0].__SCROLLPOS.value = {0}.scrollTop;}}{0}.onscroll=saveScrollPosition;</script>";
private static string setScrollPosition = "<script language='javascript'>function setScrollPosition() {{{0}.scrollTop =\"{1}\";}}{0}.onload=setScrollPosition;</script>";
//Write out javascript and hidden field
private void RetainScrollPosition()
{
RegisterHiddenField("__SCROLLPOS", "0");
string __bodyID = BodyID == null ? "thebody" : BodyID;
RegisterStartupScript("saveScroll", string.Format(saveScrollPosition, __bodyID));
if (Page.IsPostBack)
{
RegisterStartupScript("setScroll", string.Format(setScrollPosition, __bodyID, Request.Form["__SCROLLPOS"]));
}
}
}