我怎样才能回到postback
页面的相同位置。它总是似乎到达页面的顶部。
我尝试过使用maintainScrollPositionOnPostBack = "true"
但它不起作用。
我最近也在寻找这个。想出了一大堆Javascript,直到找到以下内容:
在.aspx代码文件的顶部,插入以下内容:
MaintainScrollPositionOnPostback="true"
所以.aspx中的第一句开头
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
这对我来说很好,而无需使用updatepanel添加任何其他代码来保持滚动条位置
我用过几种方法来设置maintainScrollPositionOnPostBack。你试过不止一个吗?你能描述一下触发回发的内容以及你测试过的浏览器吗?你在使用母版页吗?
Page.MaintainScrollPositionOnPostBack = true;
。<%@ Page MaintainScrollPositionOnPostback="true" %>
<pages maintainScrollPositionOnPostBack="true" />
中当页面回发时,您可以将.Focus()设置到特定的服务器控件上。
您是否使用Google Chrome进行测试?我遇到了同样的问题但是开始在IE和Firefox中进行测试并且它正在运行。我认为Chrome不支持此属性。它也可能是.NET Framework 3.5的问题。它可能已在.NET 4.0中修复
<script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
yPos = $get('<%=Panel1.ClientID%>').scrollTop;
}
}
function EndRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
$get('<%=Panel1.ClientID%>').scrollLeft = xPos;
$get('<%=Panel1.ClientID%>').scrollTop = yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
在ScriptManager
标记中添加上面的代码,并在页面声明中添加MaintainScrollPositionOnPostback="true"
如果你有一个特定的锚,你想移动到你可以做一些像描述here。否则你将不得不使用javascript并找出你离顶部有多远,将它保存在隐藏字段或cookie中,并在页面加载后重置视图。
虽然bbbwex的回复是正确的,但实际上我花了一段时间才意识到需要将MaintainScrollPositionOnPostback =“true”放在两者上
它在我满足两个条件之后工作。
注意:如果您定义了默认控件,即使Page MaintainScrollPositionOnPostback =“true”,它也会在回发后滚动到该控件
从这个问题:Maintain Panel Scroll Position On Partial Postback ASP.NET
几天来我一直在寻找这个问题的答案,使用MaintainScrollPositionOnPostback的典型替代方案和使用BeginRequestHandler和EndRequestHandler的JavaScript解决方案,在我的例子中我使用MasterPage。
没有什么工作,但是我想出了一个相当简单的解决方案,使用jQuery与BeginRequestHandler和EndRequestHandler使用相同的@ waqas-raja算法:
<script type="text/javascript">
var scrollPosition = 0;
$(document).ready(function () {
$(window).scroll(function (event) {
scrollPosition = $(window).scrollTop();
});
});
</script>
<script type="text/javascript">
// It is important to place this JavaScript code after ScriptManager1
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
console.log('BeginRequest');
}
function EndRequestHandler(sender, args) {
$(window).scrollTop(scrollPosition);
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
</script>
这个想法是每次用户移动Scroll时捕获Scroll在全局变量中的位置,这样就知道哪个是最后一个位置,当进行回发时,EndRequestHandler事件被输入并用最后一个位置更新为什么用户标记
这在Firefox和谷歌浏览器中对我有用:)