如何在autopostback上保持滚动位置?

问题描述 投票:19回答:9

我怎样才能回到postback页面的相同位置。它总是似乎到达页面的顶部。

我尝试过使用maintainScrollPositionOnPostBack = "true"

但它不起作用。

c# asp.net postback
9个回答
36
投票

我最近也在寻找这个。想出了一大堆Javascript,直到找到以下内容:

在.aspx代码文件的顶部,插入以下内容:

 MaintainScrollPositionOnPostback="true"

所以.aspx中的第一句开头

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"

这对我来说很好,而无需使用updatepanel添加任何其他代码来保持滚动条位置


15
投票

我用过几种方法来设置maintainScrollPositionOnPostBack。你试过不止一个吗?你能描述一下触发回发的内容以及你测试过的浏览器吗?你在使用母版页吗?

  1. 您可以在页面加载后面的代码中设置Page.MaintainScrollPositionOnPostBack = true;
  2. 您可以将其添加到页面声明<%@ Page MaintainScrollPositionOnPostback="true" %>
  3. 您可以将其添加到Web配置文件<pages maintainScrollPositionOnPostBack="true" />

6
投票

当页面回发时,您可以将.Focus()设置到特定的服务器控件上。


3
投票

您是否使用Google Chrome进行测试?我遇到了同样的问题但是开始在IE和Firefox中进行测试并且它正在运行。我认为Chrome不支持此属性。它也可能是.NET Framework 3.5的问题。它可能已在.NET 4.0中修复


1
投票
<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"


0
投票

如果你有一个特定的锚,你想移动到你可以做一些像描述here。否则你将不得不使用javascript并找出你离顶部有多远,将它保存在隐藏字段或cookie中,并在页面加载后重置视图。


0
投票

虽然bbbwex的回复是正确的,但实际上我花了一段时间才意识到需要将MaintainScrollPositionOnPostback =“true”放在两者上

  1. ASPX页面的顶部。
  2. 在IsPostBack中

它在我满足两个条件之后工作。


0
投票

注意:如果您定义了默认控件,即使Page MaintainScrollPositionOnPostback =“true”,它也会在回发后滚动到该控件


0
投票

从这个问题: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和谷歌浏览器中对我有用:)

© www.soinside.com 2019 - 2024. All rights reserved.