Scroll Page Class 解决定位问题

       在开发B/S系统的时候,由于页面的刷新问题,经常会导致页面自动滚动到开始。然而有时候,我们需要页面在刷新后返回到页面前的位置。为了解决这个问题,我写了一个方法,大家可以参阅,其实也不是一种高明的做法,但至少解决了一些问题。

        原理就是在你需要的位置添加一个对象控件,让页面刷新后定位到此控件的位置,使用了scrollIntoView方法。

 

  public   void  ScrollToObject( string  str_Ctl_Name,Page page)
{
    
if(!page.IsStartupScriptRegistered ("ScrollObject"))
   
{
         page.RegisterStartupScript(
"msgScrollObject"," <script>document.forms(0)."+str_Ctl_Name+".scrollIntoView();document.forms(0)."+str_Ctl_Name+".focus(); </script>");
  }

}

 


注:ScrollToObject:方法名
        str_Ctl_Name:控件名
        例子:ScrollToObject(Button1,Page);

对于DataGrid的的定位问题,你可以使用HTML 中锚点的方式来解决,具体的操作可以参阅HTML手册来学习锚点是怎样运用的,这里就不再多谈了

 

以前的解决方法
原文地址:http://www.cnblogs.com/hbzxf/archive/2004/08/10/31916.aspx

无意中从网上查到的scrollPage Class 原文如下

Scroll Page

A while back, I saw a presentation on how to maintain your scroll position after a postback. I decided to create a quick page class you can derive from which will allow you to always maintain your scroll position. Enjoy! (Text version: http://scottwater.com/code/ScrollPage.cs.txt)

  
  
  
  
1 :      using  System;
2 :      using  System.IO;
3 :      using  System.Text;
4 :      using  System.Text.RegularExpressions;
5 :      using  System.Web.UI;
6 :     
7 :      namespace  ScottWater.Pages
8 :      {
9:         /**//// <summary>
10:        /**//// Summary description for ScrollPage.
11:        /**//// </summary>
12:        public class ScrollPage : System.Web.UI.Page
13:        {
14:            public ScrollPage()
15:            {
16:    
17:            }

18:    
19:            private bool _useScrollPersistence = true;
20:            /**//// <summary>
21:            /**//// There could be PostBack senarios where we do not want to remember the scroll position. Set this property to false
22:            /**//// if you would like the page to forget the current scroll position
23:            /**//// </summary>
24:            public bool UseScrollPersistence
25:            {
26:                get {return this._useScrollPersistence;}
27:                set {this._useScrollPersistence = value;}
28:            }

29:    
30:            private string _bodyID;
31:            /**//// <summary>
32:            /**//// Some pages might already have the ID attribute set for the body tag. Setting this property will not render the ID or change
33:            /**//// the existing value. It will simply update the javascript written out to the browser.
34:            /**//// </summary>
35:            public string BodyID
36:            {
37:                get {return this._bodyID;}
38:                set {this._bodyID = value;}
39:            }

40:    
41:    
42:            //Last chance. Do we want to maintain the current scroll position
43:            protected override void OnPreRender(EventArgs e)
44:            {
45:                if(UseScrollPersistence)
46:                {
47:                    RetainScrollPosition();
48:                }

49:                base.OnPreRender (e);
50:            }
        
51:    
52:            protected override void Render(HtmlTextWriter writer)
53:            {
54:                //No need processing the HTML if the user does not want to maintain scroll position or already has
55:                //set the body ID value
56:                if(UseScrollPersistence && BodyID == null)
57:                {
58:                    TextWriter tempWriter = new StringWriter();
59:                    base.Render(new HtmlTextWriter(tempWriter));
60:                    writer.Write(Regex.Replace(tempWriter.ToString(),"<body","<body id="thebody" ",RegexOptions.IgnoreCase));
61:                }

62:                else
63:                {
64:                    base.Render(writer);
65:                }

66:            }

67:    
68:            private static string saveScrollPosition = "<script language='javascript'>function saveScrollPosition() {{document.forms[0].__SCROLLPOS.value = {0}.scrollTop;}}{0}.onscroll=saveScrollPosition;</script>";
69:            private static string setScrollPosition = "<script language='javascript'>function setScrollPosition() {{{0}.scrollTop ="{1}";}}{0}.onload=setScrollPosition;</script>";
70:    
71:            //Write out javascript and hidden field
72:            private void RetainScrollPosition()
73:            {
74:                RegisterHiddenField("__SCROLLPOS""0");
75:                string __bodyID = BodyID == null ? "thebody" : BodyID;
76:                RegisterStartupScript("saveScroll"string.Format(saveScrollPosition,__bodyID));
77:    
78:                if(Page.IsPostBack)
79:                {
80:                    RegisterStartupScript("setScroll"string.Format(setScrollPosition,__bodyID, Request.Form["__SCROLLPOS"]));
81:                }

82:            }

83:        }

84:    }

你可能感兴趣的:(Scroll Page Class 解决定位问题)