16

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

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

4

8 回答 8

43

阿贾克斯解决方案

当然,最好的方法是使用 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

只需两行 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

于 2012-04-13T03:58:01.883 回答
8

防止回发后页面滚动的两种最佳方法是: 将其放在 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" %>

注意:这将适用于您要阻止的特定形式。

于 2016-11-09T00:21:58.087 回答
4

我可以想到三种可能的方法:

  1. 在应该禁用滚动的页面上,将MaintainScrollPositionOnPostbackPage ("<%@ Page ....>") 指令中的属性设置为 true,即<%@ Page MaintainScrollPositionOnPostback=true ...other settings... >应该出现在 aspx 页面的顶部

  2. 对于网站中的所有页面,在 web.config 中添加以下行: <pages MaintainScrollPositionOnPostback=true>

  3. 合并 AJAX 查询

于 2013-09-29T05:28:55.750 回答
1

当你想停止滚动和页面刷新时,MaintainScrollPositionOnPostback="true"标签是最重要的。

于 2018-07-12T06:53:30.040 回答
0

借助 runat 标记,可以在 .NET 中以编程方式引用 HTML 标记。

只需在 HTML 中给 body 标记一个 runat="server" 和一个 id="body" 或任何你想在代码中引用它的东西(我将body用于示例)。

然后您可以在代码中添加/修改标签的属性,如下所示:

Body.Attributes.Add("scroll", "no")

将代码放在页面加载上。

于 2014-10-27T13:55:40.880 回答
0

将此行放入 webconfig 文件中:

<pages maintainScrollPositionOnPostBack="true">
于 2015-06-22T07:08:28.520 回答
0

您可以覆盖窗口的“scrollTo”方法并且在其中不执行任何操作,因此 updatePanel 设置页面滚动位置的尝试将失败:)

function scrollTo(x, y) {
}
于 2020-09-03T22:17:29.140 回答
0

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;
        }
    };
于 2020-10-26T03:45:17.793 回答