回发后阻止页面滚动

Kru*_*uug 13 vb.net asp.net visual-studio

我正在根据CheckBoxList中的检查添加用户的分数.每次用户选中一个框时,都会将值X添加到总分中.当用户取消选中某个框时X,会从总分中减去一个值.这里没问题.

我遇到的问题是在CheckBoxList属性中使用AutoPostback选项会强制页面加载回顶部而不是停留在用户所在的位置,这意味着他们必须在每次检查/取消选中后继续向下滚动.有办法防止这种情况吗?

Ari*_*tos 38

Ajax解决方案

当然,最好的方法是使用Ajax调用.页面根本不移动,数据刚刚更新.updatepanel是一个快速简便的启动解决方案 - 不是最佳解决方案,但如果你有一个简单的页面,它是一个非常好的.

二解决方案

第二种解决方案是使用锚#.您可以设置您希望它显示的点:

<a name="PointA"></a>
Run Code Online (Sandbox Code Playgroud)

并且您使用该锚点调用该页面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);
Run Code Online (Sandbox Code Playgroud)

然后将页面移动到此元素:

<a id="PointA" name="PointA"></a>
Run Code Online (Sandbox Code Playgroud)

谷歌搜索

最后,您可以使用自定义JavaScript代码执行相同操作.互联网上有许多样本:https://www.google.com/?q = asp.net+remain +position

  • 工作非常棒!谢谢! (2认同)

小智 6

回发后阻止页面滚动的两种最佳方法是:将它放在web.config中.
1) 页面maintainScrollPositionOnPostBack ="true"

很多人质疑这条线的确切位置在哪里.所以放这条线的确切位置是

<system.web>
<pages maintainScrollPositionOnPostBack="true">
</system.web>
Run Code Online (Sandbox Code Playgroud)

注意:这将适用于整个解决方案,它会阻止每个表单滚动

2) 实现这一点的第二种方法是将此行放在aspx文件的顶部

MaintainScrollPositionOnPostback =真

像这样

<%@ Page MaintainScrollPositionOnPostback=true Language="C#" AutoEventWireup="true" CodeBehind="xx.aspx.cs" Inherits="xx.Global" %>
Run Code Online (Sandbox Code Playgroud)

注意:这将适用于您要阻止的特定表单.