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

时间:2009-11-25 08:26:33

标签: asp.net javascript asynchronous code-behind

所以我需要在asp.net更新面板中返回异步后回滚到页面顶部。

我使用的代码是:

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

但是,我只想在单击导致异步回发的某个按钮时运行它。

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

任何帮助都会得到应用,谢谢!

4 个答案:

答案 0 :(得分:4)

我对解决方案的追求终于结束了。这个问题是帮助的一部分,其余的我找到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);

答案 1 :(得分:3)

我使用了Farinha的答案(谢谢!)并稍微改了一下,所以我可以在任何我想要滚动到顶部的地方调用该方法,但是否则保持滚动位置。

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);
}

答案 2 :(得分:1)

试试这个:

protected void myButon_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, typeof(MyControl), "someText", "alert('!');", true); 
}

答案 3 :(得分:1)

改进@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的{​​{1}}重置为_scrollPosition处理程序,而这里我们实际上是从请求。

无论如何,在进行自己的add_beginRequest通话之前重置_scrollPosition肯定有效。