<system.web>
<pages smartNavigation="true"/>
</system.web>
也可以只针对某一个页面来设置这个属性,他的实现原理,其实是对页面的输出进行了一次封装,将整个页面放在了一个IFrame里
...
<IFRAME ID="__hifSmartNav" NAME="__hifSmartNav" STYLE="display:none"
src="/aspnet_client/system_web/1_1_4322/SmartNav.htm"></IFRAME>
...
<script language="JScript" src="/aspnet_client/system_web/1_1_4322/SmartNav.js"></script>
...
有兴趣可以去研究一下SmartNav.js,我这里就不多说了,可以参考http://www.cnblogs.com/birdshome/archive/2004/09/03/39115.aspx
2.使用脚本来控制滚动
使用第一种方法确实方便,但由于使用的是IFrame,会出现一些不兼容的情况,这里再介绍另一个方法
window.onload =function()
{
if(getcookie("height")!=null)
document.body.scrollTop=getcookie("height");
}
window.onunload =function ()
{
setcookie("height",document.body.scrollTop);
}
function getcookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++)
{
var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
return unescape(aCrumb[1]);
}
return null;
}
function setcookie(sName, sValue)
{
date = new Date();
date.setTime(date.getTime()+5000); //5 second
document.cookie = sName + "=" + escape(sValue) + "; expires=" + date.toGMTString();
}
也就是说在页面onunload的时候,记住滚动条位置,在onload的时候控制滚动条移动,从客户体验来看,第一种要好于第二种,从兼容来看,第二种又较,如果smartNavigation使用后没有出现异常(主要是客户端的)建议还是使用smartNavigation,实在不行了,再考虑第二种。
_________________________________
页面提交或更新数据后,返回页面重新回到原来位置,包括滚动条的位置都可以保存。
这里用到的是asp.net中page对象的一个属性:
<!--
MaintainScrollPositionOnPostback - 如果为true,浏览器中页面位置将通过回送保留
-->
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>
当然,这个属性也可以在web.config中设置
在 System.web 下面的Pages元素
<pages
buffer="[True|False]"
enableEventValidation="[True|False]"
enableSessionState="[True|False|ReadOnly]"
enableViewState="[True|False]"
enableViewStateMac="[True|False]"
smartNavigation="[True|False]"
autoEventWireup="[True|False]"
pageBaseType="typename, assembly"
userControlBaseType="typename"
validateRequest="[True|False]"
masterPageFile="file path"
theme="string"
styleSheetTheme="string"
maxPageStateFieldLength="number"
compilationMode="[Always|Auto|Never]"
pageParserFilterType="string"
viewStateEncryptionMode="[Always|Auto|Never]"
maintainScrollPositionOnPostBack="[True|False]"
asyncTimeout="number"
>