无论我尝试什么,我都无法让 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>/>