0

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

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

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

問題は、これらのどれも実際の移行ポストバックに影響を与えないように見えることです。それらは次のポストバックで有効になり、実際にはより大きな問題を引き起こします。

新しいビューに遷移するポストバックでのみ MultiView ページをページのトップにジャンプさせる実証済みの方法を誰かが持っていますか?

4

2 に答える 2

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);
      }
  }
于 2011-01-31T19:33:24.457 に答える
1

最終的に答え/回避策を見つけました:4Guys

スクロール位置の追跡に使用する非表示フィールドを操作して、ASP.Net をだましてそれを実行させる必要があります。

于 2011-01-31T18:31:28.667 に答える