所以我需要在asp.net更新面板中返回异步后回滚到页面顶部。
我使用的代码是:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestEventHandler);
function EndRequestEventHandler(sender, args)
{
scrollTo(0,0);
}
但是,我只想在单击导致异步回发的某个按钮时运行它。
如何在我的代码后面按钮事件中连接此事件?
任何帮助都会得到应用,谢谢!
答案 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
肯定有效。