首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP页面滚动到UpdatePanel更新的顶部

ASP页面滚动到UpdatePanel更新的顶部
EN

Stack Overflow用户
提问于 2012-06-22 17:57:30
回答 4查看 8.3K关注 0票数 2

我遇到了一个问题,我有一个UpdatePanel,它使用计时器来触发更新带有新点的ASP图(本质上是https://web.archive.org/web/20201205213920/https://www.4guysfromrolla.com/articles/121609-1.aspx在“创建实时图表”下的指南)。我遇到了一个问题,每当计时器滴答滴答的时候,整个页面都会滚动到顶部。当计时器滴答滴答时,如何保持页面中的滚动位置?我在https://web.archive.org/web/20211020140248/https://www.4guysfromrolla.com/articles/111704-1.aspx和其他几种类似的JavaScript解决方案中尝试了这些指令,但是每当计时器滴答滴答的时候,x和y变量就会被清除掉。

代码:

代码语言:javascript
复制
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication4._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"></asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ScriptManager ID="scmManager" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="updRealtimeChart" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            <asp:Chart ID="chtRandomData" ...></asp:Chart><br />
            <asp:Repeater ID="valueRepeater"...></asp:Repeater>
            <asp:Label ID="errorLabel" Font-Bold="true" Font-Size="Larger" ForeColor="Firebrick" BackColor="Khaki" runat="server"></asp:Label>
            <asp:Timer ID="tmrRefreshChart" runat="server" Interval="300"></asp:Timer>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="periodUpdate" />
        </Triggers>
    </asp:UpdatePanel>
    ...etc rest of the page...

编辑:在后面的代码中,我尝试过这样做来检查发生了什么:

代码语言:javascript
复制
public partial class _Default : System.Web.UI.Page
{
    public int count = 0;
    protected void Page_Init(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
        count++;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        errorLabel.Text += count;
        ... }

当我运行它时,UpdatePanel不断地向errorLabel添加一个"1“,这表明Page_Load和Page_Init函数只发生过一次,但是更新面板仍在移动滚动位置。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-22 19:40:31

这看起来像一个熟悉的.NET Bug。在计时器控件上设置ClientIDMode=Auto应修复它

票数 1
EN

Stack Overflow用户

发布于 2012-06-22 18:01:46

您可以在javascript中使用document.body.scrollTop存储滚动位置,然后将其重新分配。我用了它对我起了作用。

也试着

代码语言:javascript
复制
Page.MaintainScrollPositionOnPostBack = true; 
票数 5
EN

Stack Overflow用户

发布于 2016-06-06 12:59:34

我也有过类似的情况。在我的例子中,我只需要一个勾号就可以触发数据同步,所以当更新面板执行更新时,我用来避免页面滚动到顶部的解决方案是在关闭的JavaScript标记之后插入这个ScriptManager标记。

代码语言:javascript
复制
<script type="text/javascript">
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            prm.add_beginRequest(beginRequest);
            function beginRequest() {
                prm._scrollPosition = null;
            }
</script>

我希望这对你有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11161652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档