在开发asp.net项目过程中,经常遇到页面智能导航的问题。在最开始使用asp.net提供的SmartNagivation,但是因为SmartNavigation是通过在网页中嵌入IFrame的方式实现的,经常会出问题。如在使用Frame的页面中使用会造成样式页失效,和校验控件一起使用时会有问题等等。从网上也搜集了很多资料,大部分都是通过javascript来保存网页当前视图位置的方式来实现的,使用起来经常还是会出现页面抖动。 
偶尔发现了微软的一个示例中的解决方法,代码如下:
    Private Sub RetainScrollPosition()
Private Sub RetainScrollPosition()   
 
 
 Dim saveScrollPosition As New StringBuilder()
Dim saveScrollPosition As New StringBuilder()   
 Dim setScrollPosition As New StringBuilder()
Dim setScrollPosition As New StringBuilder()   
 
 
 RegisterHiddenField("__SCROLLPOS", "0")
RegisterHiddenField("__SCROLLPOS", "0")   
 
 
 saveScrollPosition.Append("<script language='javascript'>")
saveScrollPosition.Append("<script language='javascript'>")   
 saveScrollPosition.Append("function saveScrollPosition() {")
saveScrollPosition.Append("function saveScrollPosition() {")   
 saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")
saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")   
 saveScrollPosition.Append("}")
saveScrollPosition.Append("}")   
 saveScrollPosition.Append("thebody.onscroll=saveScrollPosition;")
saveScrollPosition.Append("thebody.onscroll=saveScrollPosition;")   
 saveScrollPosition.Append("</script>")
saveScrollPosition.Append("</script>")   
 
 
 RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
RegisterStartupScript("saveScroll", saveScrollPosition.ToString())   
 
 
 If (Page.IsPostBack = True) Then
If (Page.IsPostBack = True) Then   
 
 
 setScrollPosition.Append("<script language='javascript'>")
setScrollPosition.Append("<script language='javascript'>")   
 setScrollPosition.Append("function setScrollPosition() {")
setScrollPosition.Append("function setScrollPosition() {")   
 setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")
setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")   
 setScrollPosition.Append("}")
setScrollPosition.Append("}")   
 setScrollPosition.Append("thebody.onload=setScrollPosition;")
setScrollPosition.Append("thebody.onload=setScrollPosition;")   
 setScrollPosition.Append("</script>")
setScrollPosition.Append("</script>")   
 
 
 RegisterStartupScript("setScroll", setScrollPosition.ToString())
RegisterStartupScript("setScroll", setScrollPosition.ToString())   
 
 
 End If
End If   
 
 
 End Sub
End Sub   
 在Page_load中调用该函数,另外,在aspx页面中将body的id起名为thebody
 
   
在Page_load中调用该函数,另外,在aspx页面中将body的id起名为thebody 
大体上还是通过ViewState保存当前位置的方式来实现的,但是很好用。
偶尔发现了微软的一个示例中的解决方法,代码如下:
 Private Sub RetainScrollPosition()
Private Sub RetainScrollPosition()   
 
 
 Dim saveScrollPosition As New StringBuilder()
Dim saveScrollPosition As New StringBuilder()   
 Dim setScrollPosition As New StringBuilder()
Dim setScrollPosition As New StringBuilder()   
 
 
 RegisterHiddenField("__SCROLLPOS", "0")
RegisterHiddenField("__SCROLLPOS", "0")   
 
 
 saveScrollPosition.Append("<script language='javascript'>")
saveScrollPosition.Append("<script language='javascript'>")   
 saveScrollPosition.Append("function saveScrollPosition() {")
saveScrollPosition.Append("function saveScrollPosition() {")   
 saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")
saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")   
 saveScrollPosition.Append("}")
saveScrollPosition.Append("}")   
 saveScrollPosition.Append("thebody.onscroll=saveScrollPosition;")
saveScrollPosition.Append("thebody.onscroll=saveScrollPosition;")   
 saveScrollPosition.Append("</script>")
saveScrollPosition.Append("</script>")   
 
 
 RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
RegisterStartupScript("saveScroll", saveScrollPosition.ToString())   
 
 
 If (Page.IsPostBack = True) Then
If (Page.IsPostBack = True) Then   
 
 
 setScrollPosition.Append("<script language='javascript'>")
setScrollPosition.Append("<script language='javascript'>")   
 setScrollPosition.Append("function setScrollPosition() {")
setScrollPosition.Append("function setScrollPosition() {")   
 setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")
setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")   
 setScrollPosition.Append("}")
setScrollPosition.Append("}")   
 setScrollPosition.Append("thebody.onload=setScrollPosition;")
setScrollPosition.Append("thebody.onload=setScrollPosition;")   
 setScrollPosition.Append("</script>")
setScrollPosition.Append("</script>")   
 
 
 RegisterStartupScript("setScroll", setScrollPosition.ToString())
RegisterStartupScript("setScroll", setScrollPosition.ToString())   
 
 
 End If
End If   
 
 
 End Sub
End Sub   
 
 
   大体上还是通过ViewState保存当前位置的方式来实现的,但是很好用。
 
                    
                     
                    
                 
                    
                 
                
 
 
        
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号