MaintainScrollPositionOnPostback is not working?

本文关键字:working not is MaintainScrollPositionOnPostback | 更新日期: 2023-09-27 17:53:06

我有一个有两个下拉列表的页面(ddlA和ddlB)一旦用户从ddlA中选择了一个项目,它将在ddlB中填充项目我已经为ddlA打开了自动回发。

,因为我想保持滚动的位置,我把MaintainScrollPositionOnPostBack打开为true,就像在页面加载方法中一样。:

this.MaintainScrollPositionOnPostBack = true;

但这似乎并不能解决问题。

有解决这个问题的方法吗?

——

我将这个js代码添加到页面中,现在的问题是自动修复永远不会发生。

  <script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
    xPos = $get('scrollDiv').scrollLeft;
    yPos = $get('scrollDiv').scrollTop;
}
function EndRequestHandler(sender, args) {
    $get('scrollDiv').scrollLeft = xPos;
    $get('scrollDiv').scrollTop = yPos;
}
    </script>

我添加的js代码不正确吗?我在这里找到的

MaintainScrollPositionOnPostback is not working?

尝试将此添加到ASPX文件中的Page指令中,并测试该路由。

<%@ Page Title="" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" MaintainScrollPositionOnPostback="true" Inherits="_Default" %>

我不能得到MaintainScrollPositionOnPostback为我工作,无论我尝试什么。基于这个答案(https://stackoverflow.com/a/27505983)和下面的评论,我尝试了下面的代码,为我工作。这将只工作,如果你有一个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>/>