代码之家  ›  专栏  ›  技术社区  ›  Jack Marchetti

在异步回发后滚动到页面顶部

  •  1
  • Jack Marchetti  · 技术社区  · 16 年前

    所以我需要在ASP.NET更新面板中的异步发布后滚动到页面顶部。

    我使用的代码是:

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestEventHandler);
    function EndRequestEventHandler(sender, args)
    {
        scrollTo(0,0);
    }
    

    但是,我只希望在我单击某个按钮时运行它,这会导致异步回发。

    如何在我的代码隐藏按钮事件中连接此事件?

    任何帮助都会被逮捕,谢谢!

    4 回复  |  直到 12 年前
        1
  •  1
  •   A_HREF    16 年前

    试试这个:

    protected void myButon_Click(object sender, EventArgs e)
    {
    ScriptManager.RegisterStartupScript(this, typeof(MyControl), "someText", "alert('!');", true); 
    }
    
        2
  •  4
  •   Farinha    15 年前

    我对解决方案的追求终于结束了。这个问题是帮助的一部分,我找到的其他问题 here .

    必须重写ASP.NET Ajax记忆滚动位置的行为:

    <script type="text/javascript"> 
    
    var manager = Sys.WebForms.PageRequestManager.getInstance(); 
    
    manager.add_beginRequest(beginRequest); 
    function beginRequest() 
    { 
        manager._scrollPosition = null; 
    } 
    </script>
    

    然后在这里的答案中使用代码位,在我想滚动到顶部的页面后面的代码中:

    ScriptManager.RegisterStartupScript(this, typeof(MyControl), "someText", "window.scrollTo(0, 0)", true);
    
        3
  •  3
  •   MicrosoftAccessPros.com    13 年前

    我用了法林哈的回答(谢谢!)稍微改变一下,这样我就可以在任何我想滚动到顶部的地方调用这个方法,但是保持滚动位置。

    public static void ScrollToTop(int intPosY = 0)
        {
            string strScript = @"var manager = Sys.WebForms.PageRequestManager.getInstance(); 
                manager.add_beginRequest(beginRequest); 
                function beginRequest() 
                { 
                    manager._scrollPosition = null; 
                }
                window.scroll(0," + intPosY.ToString() + ");";
    
            Page pagCurrent = GetCurrentPage();
            ScriptManager.RegisterStartupScript(pagCurrent, pagCurrent.GetType(), string.Empty, strScript, true);
    
            return;
        }
    
    public static Page GetCurrentPage()
    {
        return (HttpContext.Current.Handler as Page);
    }
    
        4
  •  1
  •   Community Mohan Dere    9 年前

    改进的答案 @Farinha 和 @Bradford Scott ,代码可以简化为:

    var script = 
        "Sys.WebForms.PageRequestManager.getInstance()._scrollPosition = null; " +
        "window.scrollTo(0, 0);"
    
    ScriptManager.RegisterStartupScript(this, GetType(), "key", script, true);
    

    我甚至不知道为什么他们的脚本工作,因为他们添加了 Sys.WebForms.PageRequestManager 的 _scrollPosition 作为一个 add_beginRequest 处理程序,这里我们实际上是从请求返回。

    无论如何,重置 滚动位置 在你自己做之前 scrollTo() 打电话肯定行。