8
  1. Web.config 级别 => 页面维护ScrollPositionOnPostBack="true" />

  2. 页面级别 => <%@ Page MaintainScrollPositionOnPostback="true" %>

  3. 代码级别 => Page.MaintainScrollPositionOnPostBack = true;

  4. 浏览器级别 => 浏览器 id="Chrome" parentID="Safari1Plus"> 能力> 能力名称="supportsMaintainScrollPositionOnPostback" value="true" /> 能力> 浏览器>

上面提到的 4 种方法中的任何一种都不适用于 google chrome。它在 Firefox 上运行良好。请提供任何解决方案。

4

3 回答 3

6

您可以将此代码段添加到您的 ASP.NET Page/MasterPage(需要 jQuery):

<asp:HiddenField runat="server" ID="hfPosition" Value="" />
<script type="text/javascript">
    $(function () {
        var f = $("#<%=hfPosition.ClientID%>");
        window.onload = function () {
            var position = parseInt(f.val());
            if (!isNaN(position)) {
                $(window).scrollTop(position);
            }
        };
        window.onscroll = function () {
            var position = $(window).scrollTop();
            f.val(position);
        };
    });
</script>
于 2014-12-16T13:40:03.230 回答
2

我也面临同样的问题。我在这里找到了一个 Javascript 解决方案。

<script type = "text/javascript">
window.onload = function () {
    var scrollY = parseInt('<%=Request.Form["scrollY"] %>');             
    if (!isNaN(scrollY)) {
        window.scrollTo(0, scrollY);
    }
};
window.onscroll = function () {
    var scrollY = document.body.scrollTop;
    if (scrollY == 0) {
        if (window.pageYOffset) {
            scrollY = window.pageYOffset;
        }
        else {
            scrollY = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
        }
    }
    if (scrollY > 0) {
        var input = document.getElementById("scrollY");
        if (input == null) {
            input = document.createElement("input");
            input.setAttribute("type", "hidden");
            input.setAttribute("id", "scrollY");
            input.setAttribute("name", "scrollY");
            document.forms[0].appendChild(input);
        }
        input.value = scrollY;
    }
};

我希望这会对你有所帮助。

于 2017-05-30T12:12:07.200 回答
1

无论我尝试什么,我都无法让 MaintainScrollPositionOnPostback 为我工作。根据 Darkseal 的回答和 Eirik H 的评论,我尝试了以下对我有用的代码。这只有在页面上有 ASP.NET ScriptManager(即 MicrosoftAjax.js)时才有效。您还需要将 JQuery 添加到您的页面中。将以下代码添加到您的 .aspx 文件中 asp:ScriptManager 标记下的某处。

<asp:HiddenField runat="server" ID="hfPosition" Value="" />
<script type="text/javascript">
    $(function () {
        var positionField = $("#<%=hfPosition.ClientID%>");
        window.onscroll = function () {
            var position = $(window).scrollTop();
            positionField.val(position);
        };
    });

    function pageLoad() {
        var positionField = $("#<%=hfPosition.ClientID%>");
        var position = parseInt(positionField.val());
        if (!isNaN(position)) {
            $(window).scrollTop(position);
        }
    };
</script>

基本上,我们将滚动位置保存在一个名为 hfPosition 的隐藏字段的值内。每当页面滚动时,该值都会更新。然后当回发发生时 pageLoad() 将被自动调用并获取 hfPosition 的值并滚动到该值。

包括 ScriptManager 和 JQuery,我的最终代码片段如下所示:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script src="../Scripts/jquery-3.3.1.min.js" type="text/javascript"></script>
<asp:HiddenField runat="server" ID="hfPosition" Value="" />
<script type="text/javascript">
    $(function () {
        var positionField = $("#<%=hfPosition.ClientID%>");
        window.onscroll = function () {
            var position = $(window).scrollTop();
            positionField.val(position);
        };
    });

    function pageLoad() {
        var positionField = $("#<%=hfPosition.ClientID%>");
        var position = parseInt(positionField.val());
        if (!isNaN(position)) {
            $(window).scrollTop(position);
        }
    };
</script>/>
于 2021-05-04T20:34:31.080 回答