我正在根据他们在 CheckBoxList 中的检查来添加用户的分数。每次用户选中一个框时,都会将一个值 ,X
添加到总分中。当用户取消选中某个框时X
,会从总分中减去一个值 。这里没有问题。
我遇到的问题是使用 CheckBoxList 属性中的 AutoPostback 选项会强制页面加载回顶部,而不是停留在用户所在的位置,这意味着他们必须在每次选中/取消选中后继续向下滚动。有没有办法防止这种情况?
我正在根据他们在 CheckBoxList 中的检查来添加用户的分数。每次用户选中一个框时,都会将一个值 ,X
添加到总分中。当用户取消选中某个框时X
,会从总分中减去一个值 。这里没有问题。
我遇到的问题是使用 CheckBoxList 属性中的 AutoPostback 选项会强制页面加载回顶部,而不是停留在用户所在的位置,这意味着他们必须在每次选中/取消选中后继续向下滚动。有没有办法防止这种情况?
当然,最好的方法是使用 Ajax 调用。页面根本没有移动,数据只是更新了。更新面板是一种快速简便的启动解决方案——不是最佳解决方案,但如果您有一个简单的页面,它是一个非常好的解决方案。
第二种解决方案是使用锚#。您设置了您希望它显示的点:
<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 代码,您就可以在回帖后在您想要移动的点上制作漂亮的动画:
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)
页面维护ScrollPositionOnPostBack="true"
很多人质疑这条线的具体位置在哪里。所以放置这条线的确切位置是
<system.web>
<pages maintainScrollPositionOnPostBack="true">
</system.web>
注意:这将适用于防止每个表单滚动的整个解决方案
2) 实现这一点的第二种方法是将这一行放在 aspx 文件的顶部
维护ScrollPositionOnPostback=true
像这样
<%@ Page MaintainScrollPositionOnPostback=true Language="C#" AutoEventWireup="true" CodeBehind="xx.aspx.cs" Inherits="xx.Global" %>
注意:这将适用于您要阻止的特定形式。
我可以想到三种可能的方法:
在应该禁用滚动的页面上,将MaintainScrollPositionOnPostback
Page ("<%@ Page ....>") 指令中的属性设置为 true,即<%@ Page MaintainScrollPositionOnPostback=true ...other settings... >
应该出现在 aspx 页面的顶部
对于网站中的所有页面,在 web.config 中添加以下行:
<pages MaintainScrollPositionOnPostback=true>
合并 AJAX 查询
当你想停止滚动和页面刷新时,MaintainScrollPositionOnPostback="true"标签是最重要的。
借助 runat 标记,可以在 .NET 中以编程方式引用 HTML 标记。
只需在 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;
}
};