http://czm600604604.blog.163.com/blog/static/825206820094215237512/

 

asp.net网页智能导航SmartNavigation的替代实现方式

在开发asp.net项目过程中,经常遇到页面智能导航的问题。在最开始使用asp.net提供的SmartNagivation,但是因为SmartNavigation是通过在网页中嵌入IFrame的方式实现的,经常会出问题。如在使用Frame的页面中使用会造成样式页失效,和校验控件一起使用时会有问题等等。从网上也搜集了很多资料,大部分都是通过javascript来保存网页当前视图位置的方式来实现的,使用起来经常还是会出现页面抖动。

偶尔发现了微软的一个示例中的解决方法,代码如下:

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开Private Sub RetainScrollPosition()Sub RetainScrollPosition()  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开Dim saveScrollPosition As New StringBuilder()  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开Dim setScrollPosition As New StringBuilder()  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开RegisterHiddenField("__SCROLLPOS", "0")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append("<script language='javascript'>")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append("function saveScrollPosition() {")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append("}")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append("thebody.onscroll=saveScrollPosition;")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开saveScrollPosition.Append("</script>")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开RegisterStartupScript("saveScroll", saveScrollPosition.ToString())  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开If (Page.IsPostBack = True) Then  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append("<script language='javascript'>")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append("function setScrollPosition() {")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append("}")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append("thebody.onload=setScrollPosition;")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开setScrollPosition.Append("</script>")  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开RegisterStartupScript("setScroll", setScrollPosition.ToString())  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开End If  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开End Sub  

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

在Page_load中调用该函数,另外,在aspx页面中将body的id起名为thebody

大体上还是通过ViewState保存当前位置的方式来实现的,但是很好用。

posted on 2005-03-29 13:56 doudou 阅读(810) 评论(2)  编辑 收藏 网摘 所属分类: dribs and drabs

asp.net网页智能导航SmartNavigation的替代实现方式  - 贵霜楼沙 - 葵花即将盛开

#1楼 回复  引用    #2楼 doudou      

用C#也没有问题啊,这是我使用的方式

/// <summary>

/// page smart navigation function

/// ensure the body.id=thebody;

/// </summary>

/// <remarks>使用此函数时,一定要将body加上树型id="thebody",否则会出现javascript错误。</remarks>

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.onscroll=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.onload=setScrollPosition;") ;

setScrollPosition.Append("</script>") ;

RegisterStartupScript("setScroll", setScrollPosition.ToString()) ;

}

}