2011-01-29 8 views
0

私はMultiViewコントロールを持つページがあり、ビューの一部はスクロールするのに十分な長さです。レビューのコントロールのポストバックが正しく機能するためには、MaintainScrollPositionOnPostBackがページで有効になっている必要があります。MultiView&MaintainScrollPositionOnPostBack

ユーザーがあるビューから別のビューに移行するときに問題が発生します。それらが長いビューの一番下にあって、別の長いビューに移行すると、新しいビューがロードされ、一番下までスクロールされます。ユーザーがMultiView内の新しいビューに移動すると、ページの先頭にジャンプする必要があります。

私は、OnActiveViewChangedイベントを使用して: を試しました - 私はページの上部に配置アンカーにwindow.location.hashを設定するRegisterStartupScriptを呼び出します。 - window.scrollToは(0,0) を呼び出すためにRegisterStartupScriptを呼び出す - 設定MaintainScrollPositionOnPostBack falseに一時的に

問題は、これらのどれもが、実際の移行ポストバックに影響を与えるように思わない、彼らはポストバックに反映ということです、実際にはより大きな問題を引き起こします。

誰かが、マルチビューページを新しいビューに移行するポストバックでのみページのトップへジャンプする実績のある方法はありますか?

答えて

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

関連する問題