2011-01-29 52 views
0

我有一個帶有MultiView控件的頁面,並且一些視圖足夠長,可以滾動。由於評論中的控件可能需要回發才能正常運行,因此在頁面上啓用了MaintainScrollPositionOnPostBack。MultiView&MaintainScrollPositionOnPostBack

當用戶從一個視圖切換到另一個視圖時,出現問題。如果他們處於長視角的底部,並轉換到另一個長視圖,則新視圖將加載並一直滾動到底部。當用戶轉到MultiView中的新視圖時,我需要跳到頁面的頂部。

我已經嘗試使用OnActiveViewChanged事件來: - 調用RegisterStartupScript將window.location.hash設置爲我放置在頁面頂部的錨點。 - 打電話的RegisterStartupScript調用window.scrollTo(0,0) - 設置MaintainScrollPositionOnPostBack爲false暫時

的問題是,沒有這些似乎影響實際的過渡回傳,他們採取的下一個回發的效果,這實際上導致更大的問題。

任何人都有一個經過驗證的方法,只有在回傳到新視圖的回傳中,MultiView頁面才能跳到頁首?

回答

1

找到了答案/解決方法,最後:4Guys

你要欺騙ASP.Net成通過操縱它使用了跟蹤滾動位置的隱藏字段這樣做是爲了你。

4

這和我今天一直在用多視圖一樣的問題..我發現你的問題,並尋找答案。似乎我們找到了相同的文章!

(在C#代碼條)

private void ResetScrollPosition() 
    { 
     if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "CreateResetScrollPosition")) 
     { 
      System.Text.StringBuilder script = new System.Text.StringBuilder(); 
      script.Append("function ResetScrollPosition() {"); 
      script.Append(" var scrollX = document.getElementById(\'__SCROLLPOSITIONX\');"); 
      script.Append(" var scrollY = document.getElementById(\'__SCROLLPOSITIONY\');"); 
      script.Append(" if (scrollX && scrollY) {"); 
      script.Append(" scrollX.value = 0;"); 
      script.Append(" scrollY.value = 0;"); 
      script.Append(" }"); 
      script.Append("}"); 

      //Create the ResetScrollPosition() function 
      ClientScript.RegisterClientScriptBlock(this.GetType(), "CreateResetScrollPosition", 
      script.ToString(), true); 
      //Add the call to the ResetScrollPosition() function 
      ClientScript.RegisterStartupScript(this.GetType(), "CallResetScrollPosition", "ResetScrollPosition();", true); 
     } 
    } 
+1

我發現一個問題,使用這種方法,因爲它似乎並沒有爲我更新面板內的多視角,所以你需要連接到beginRequest和endRequest處理程序,按照此答案:http://stackoverflow.com/questions/616210/reset-scroll-position-after-async-postback-asp-net。這使我可以檢查回發控制並僅爲endRequest中的特定控件事件重置滾動位置。 – hearn 2011-02-02 12:23:12

相關問題