2009-11-25 69 views
1

所以我需要在asp.net更新面板中的異步回發後滾動到頁面的頂部。異步回貼後滾動到頁首

我使用的代碼是這樣的:

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

但是,我只希望這當我點擊某個按鈕,這將導致異步回發運行。

如何在按鈕事件背後的代碼中連接此事件?

任何幫助將appreacited,謝謝!

回答

1

試試這個:

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

我試過這個沒有成功。有些東西正在使頁面再次向下滾動到我剛剛激活的面板。 – Farinha 2011-04-07 16:15:18

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); 
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); 
} 
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的復位的_scrollPosition作爲add_beginRequest處理程序,這裏我們實際上是從請求返回的。

無論如何,重置_scrollPosition之前,使自己的scrollTo()電話絕對有效。