2010-02-26 24 views

回答

3

您可以通過在ASPX文件的頁面指令中指定MaintainScrollPositionOnPostback =「true」來完成此操作。

例如:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Inherits="MySite.MyPage" MaintainScrollPositionOnPostback="true" %> 

享受,

Koby

1

回到我的1.1項目中,我通過隱藏文本框和一些JavaScript來完成這項工作。

首先,您需要跟蹤頁面上滾動條的位置。

document.body.onscroll = function(){ 
     document.getElementById('hiddentextboxid').value =       
        document.body.scrollLeft + '|' + document.body.scrollTop; 
} 

其中hiddentextboxid是你放置在頁面上隱藏的文本框的客戶端ID。

其次,當頁面再次顯示時,您需要重置滾動位置。我在做這個第一步是發射一個javascript功能復位位置:

 string sPosition = HttpContext.Current.Request.Form[hiddentextboxid]; 
     if (sPosition != null && sPosition != "") 
     { 
      string[] sPos = sPosition.Split("|".ToCharArray()); 
      StringBuilder strScript = new StringBuilder(); 
      strScript.Append("<script language='Javascript'>\r\n"); 
      strScript.Append("function ProcessScroll(){\r\n"); 
      strScript.Append(" window.scrollTo(" + sPos[0] + ", " + sPos[1] + ");\r\n"); 
      strScript.Append("}\r\n"); 
      strScript.Append("</script>"); 
      if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "Scroll")) 
       Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Scroll", strScript.ToString()); 
     } 

然後我有了這個代碼塊來調用javascript函數在適當的時候:

  sScript.Append("<script language='javascript'>\r\n"); 
     sScript.Append("document.body.onload = function() {\r\n"); 

     if (Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "Scroll")) 
     { 
      sScript.Append(" ProcessScroll();\r\n"); 
      sScript.Append("}\r\n"); 
      sScript.Append("</script>"); 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ProcessOnLoad", sScript.ToString()); 
     } 

我相信有一些更新,更有效的方法來完成這一部分。不過,我還沒有使用過這段代碼,因爲我通常會使用Ajax回發來避免這個問題。

+0

阿賈克斯回發? – Cynede 2010-02-27 05:17:31

+0

有關在ASP.NET中使用AJAX的更多信息,請參閱http://www.asp.net/ajax/。 – 2010-02-27 19:41:29

相關問題