NOBlog 〜バカの一念〜

基本的にはNOB(ノブ)の日記。
スキークロス国際レース出場を目標に日々努力中。

  November/2007  
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
blog内検索

[ASP.NET]PostBack前と同じ場所を表示するには

2005-01-20
画面の下部にスクロールさせた状態でPostBackが発生すると、その後の表示はページトップになります。
例えば、下部にスクロールした状態で、ドロップダウンの選択項目を変更した場合(このドロップダウンはAutoPostBack=Trueだとします)など、画面トップに戻ってしまうのは都合が悪い場合があります。
結構簡単に設定できるのですが、知らない人結構多いみたいなので紹介しておきます。
方法としては、2つあります。

SmartNavigationプロパティをTrueに設定するという方法とスクリプトを利用するという方法です。
スクリプトで行うやり口はいろいろあるでしょうし、そんなに得意分野ではないので、スマートナビゲーションに
ついて少々お話ししましょう。

SmartNavigationプロパティの設定方法は、以下の3つがあります。

・@PageディレクティブにSmartNavigation属性を追加する。
(例:<%@ Page SmartNavigation="true" language="VB" %>)

・デザイナでを利用する。

・コード内で指定する。(但し、この方法を利用するケースは少ないでしょう。)

スマートナビゲーションは、ナビゲーション間のスクロール位置と要素のフォーカスを維持したままでページを更
新できるという、IE5.5以降のブラウザでサポートされるASP.NETの機能です。
ポストバックを多く利用するページでは特に役に立ちます。

しかし、注意しなければならない点もあります。いつくか挙げておきます。

●ページのAspCompat属性がtrueに設定されていると、場合によってはパフォーマンスに重大な影響を及ぼします。
   回避策としては、Pageクラスのいずれかのイベント/メソッドの内部だけでCOMコンポーネン
   トを作成します。また、ページ作成時にオブジェクトが作成されないように注意してください。

   悪い例と良い例を具体的にコードで示しておきます。

   悪い例
   Dim comObj As ComObject = New ComObject()

   Public Sub Page_Load()
     '特になし
   End Sub

   良い例
   Dim comObj As ComObject

   Public Sub Page_Load()
     comObj = New ComObject()
   End Sub


●ユーザーコントロールを動的にロード配置している画面ではスクロールが保持されない。

●(これは未確認ですが)PostBackを2つ同時に発生させた場合にはIEが落ちてしまう。(らしい)


まぁ、大抵の場合、SmartNavigation="true"で問題ないでしょう。
最近は、サードパーティ製品も.NET対応が増えてますから、COMコンポーネントを使うってことは少ないと思い
ますしね。


※注
当ブログのTipsは、@IT等の情報サイトの内容を参考にして構成された記事
もあります。Tipsの内容に著作権等権利を侵害する内容があった場合には、
告知して下さい。早急に訂正または削除にて対応したいと思います。

この記事へのトラックバックURL

この記事へのコメント
Copyright(C) PwBlog. All rights reserved.