点击按钮或其他一些操作(在PostBack之后)
后,我可以在浏览器中保存页面位置吗?我需要在我的DBGrid中的Page Change事件上,就像在msdn.microsoft.com上一样 - 当我更改Tab C# - >例如,C ++不刷新整个页面,我仍然在浏览器中处于同一位置。
答案 0 :(得分:3)
您可以通过在ASPX文件的page指令中指定MaintainScrollPositionOnPostback =“true”来完成此操作。
例如:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Inherits="MySite.MyPage" MaintainScrollPositionOnPostback="true" %>
享受,
Koby
答案 1 :(得分:1)
回到我的1.1项目,我通过一个隐藏的文本框和一些JavaScript完成了这个。
首先,您需要跟踪页面上滚动条的位置。
document.body.onscroll = function(){
document.getElementById('hiddentextboxid').value =
document.body.scrollLeft + '|' + document.body.scrollTop;
}
其中hiddentextboxid是您放置在页面上的隐藏文本框的ClientID。
其次,您需要在再次显示页面时重置滚动位置。我这样做的第一步是发出一个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回发来避免这个问题。