在开发asp.net项目过程中,经常遇到页面智能导航的问题。在最开始使用asp.net提供的SmartNagivation,但是因为SmartNavigation是通过在网页中嵌入IFrame的方式实现的,经常会出问题,譬如FreeTextBox等编辑器失效。如在使用Frame的页面中使用会造成样式页失效,和校验控件一起使用时会有问题等等。从网上也搜集了很多资料,大部分都是通过javascript来保存网页当前视图位置的方式来实现的,使用起来经常还是会出现页面抖动。
代码如下:
#region "防止页面滚动"
protected void RetainScrollPosition()
{
StringBuilder saveScrollPosition = new StringBuilder();
StringBuilder setScrollPosition = new StringBuilder();
this .RegisterHiddenField( " __SCROLLPOS " , " 0 " );
saveScrollPosition.Append( " <script language='javascript'> " );
saveScrollPosition.Append( " function saveScrollPosition() { " );
saveScrollPosition.Append( " document.forms[0].__SCROLLPOS.value = thebody.scrollTop; " );
saveScrollPosition.Append( " } " );
saveScrollPosition.Append( " thebody.οnscrοll=saveScrollPosition; " );
saveScrollPosition.Append( " </script> " );
RegisterStartupScript( " saveScroll " , saveScrollPosition.ToString());
if (Page.IsPostBack)
{
setScrollPosition.Append( " <script language='javascript'> " );
setScrollPosition.Append( " function setScrollPosition() { " );
setScrollPosition.Append( " thebody.scrollTop = " + Request[ " __SCROLLPOS " ] + " ; " );
setScrollPosition.Append( " } " );
setScrollPosition.Append( " thebody.οnlοad=setScrollPosition; " );
setScrollPosition.Append( " </script> " );
RegisterStartupScript( " setScroll " , setScrollPosition.ToString());
}
}
#endregion
在Page_load中调用该函数,另外,在aspx页面中将body的id起名为thebody , 设置页面的ViewState为true 。