防止回发后页面滚动并保持位置
Prevent page scrolling after postback and maintain position
我正在根据用户在复选框列表中的检查将用户的分数相加。 每次用户选中一个框时,都会将一个值 X
添加到总分中。 当用户取消选中某个框时,将从总分中减去一个值X
。 这里没有问题。
我遇到的问题是,在CheckBoxList属性中使用自动回发选项会强制页面加载回顶部,而不是停留在用户所在的位置,这意味着他们必须在每次选中/取消选中后继续向下滚动。 有没有办法防止这种情况?
Ajax 解决方案
当然,最好的方法是使用Ajax调用。页面根本不移动,数据只是更新。updatepanel 是一个快速简便的入门解决方案 - 不是最佳解决方案,但如果您有一个简单的页面,它是一个非常好的解决方案。
第二种解决方案
第二种解决方案是使用锚点 #。您设置您希望它显示的点:
<a name="PointA"></a>
然后,您可以使用该锚点调用页面作为page.aspx#PointA
。
第三种解决方案
第三种解决方案是使用 ASP.NET 的内部 JavaScript 代码。在页面上声明(顶部第一行)<%@ Page MaintainScrollPositionOnPostback="true" %>
.
或者在web.config上影响所有页面,<pages maintainScrollPositionOnPostBack="true" />
。
或者以编程方式System.Web.UI.Page.MaintainScrollPositionOnPostBack = true;
打开它并按需求关闭它。
使用 jQuery
只需两行jQuery代码,您就可以在回发后想要移动的点上制作漂亮的动画:
var WhereToMove = jQuery("#PointA").position().top;
jQuery("html,body").animate({scrollTop: WhereToMove }, 1000);
然后将页面移动到此元素:
<a id="PointA" name="PointA"></a>
谷歌搜索
最后,您可以使用自定义 JavaScript 代码来执行相同的操作。互联网上有很多示例:https://www.google.com/?q=asp.net+remain+position
防止回发后页面滚动的两种最佳方法是:把它放在 web.config 中。
1)pages maintenanceScrollPositionOnPostBack="true"
很多人质疑,这条线的确切位置在哪里。所以放置这条线的确切位置是
<system.web>
<pages maintainScrollPositionOnPostBack="true">
</system.web>
注意:这将适用于它防止每种形式的整个解决方案 滚动
2)实现此目的的第二种方法是将此行放在aspx文件的顶部
MaintainScrollPositionOnPostback=true
喜欢这个
<%@ Page MaintainScrollPositionOnPostback=true Language="C#" AutoEventWireup="true" CodeBehind="xx.aspx.cs" Inherits="xx.Global" %>
注意:这将适用于您要阻止的特定表单。
我能想到三种可能的方法:
-
在应禁用滚动的页面上,将页面("<%@ 页面....>")指令中的属性
MaintainScrollPositionOnPostback
设置为 true,即<%@ Page MaintainScrollPositionOnPostback=true ...other settings... >
应显示在 ASPX 页的顶部 -
对于网站中的所有页面,请在 web.config 中添加以下行:
<pages MaintainScrollPositionOnPostback=true>
-
合并 AJAX 查询
当您想要停止滚动和页面刷新时,MaintainScrollPositionOnPostback="true" 标签是最重要的事情。
runat标签,HTML标记可以在.NET中以编程方式引用。
只需在 HTML 中给 body 标签一个 runat="server",然后给 id="body" 或任何你想在代码中引用它的东西(我将使用 body
作为示例)。
然后,您可以在代码中添加/修改标记的属性,如下所示:
Body.Attributes.Add("scroll", "no")
将代码放在页面加载上。
把这一行放在 webconfig 文件中:
<pages maintainScrollPositionOnPostBack="true">
您可以覆盖窗口的"scrollTo"方法并且在其中不执行任何操作,因此尝试使用updatePanel设置页面滚动位置将失败:)
function scrollTo(x, y) {
}
MaintainScrollPositionOnPostback 并不总是在 chrome 中工作,有时会导致回发所需的逻辑出现问题。这是一个简单的javascript代码,等效于MaintainScrollPositionOnPostback。
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;
}
};
- 有没有一种方法可以直接从cordova获得滚动位置
- 根据滚动位置动态更改href
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 浏览器持续滚动位置
- Sammy.js缓存和滚动位置时,返回历史
- PHP保持滚动位置
- 按下后退按钮时,如何保持可滚动区域的滚动位置
- 滚动位置 (scrollTop) 硬件是否在浏览器中加速
- 在 React 中创建滚动位置指标
- 关闭移动菜单后恢复滚动位置
- 检测可滚动元素内的滚动位置
- 如何在反应性呈现新帖子时保持滚动位置
- UI 路由器 - 在状态之间转换时记住滚动位置
- 单击下拉列表时保持滚动位置(javascript)
- 保留选项后的滚动位置(单击时)
- js-scrollToEl获取滚动位置
- Backbone.js路由和滚动位置
- 如何更改页眉'的底部边框颜色取决于滚动位置
- 如何精确地获得页面的最大滚动位置
- 导航栏固定底部位置,当到达滚动位置时切换到静态