ASP.NET 4 Web フォームで SEO対策 第2回 ~ ASP.NET 4 でのViewState 設定を理解する ~
こんにちは。
9月10日・11日に開催される「OSC 2010 Tokyo」開催記念として、某レンタルサーバーにて利用できる Web プラットフォーム インストーラー について紹介しようと思ったのですが、会社の IP から接続拒否されてしまいました。。。という事で標題の内容をお届けします。
今までの ViewState 設定方法
今までは無効にしたいサーバーコントロールの EnableViewState プロパティ(*) を無効に設定する必要がありました。基本的に はViewState を無効にしたいサーバーコントロールが多いので、各サーバーコントロールに対して無効の設定をしていくのはかなり面倒でした。
(*) EnableViewState: 「True」ViewState を有効にする。「False」ViewState を無効にする。デフォルトは「True」
ASP.NET 4での ViewState 設定方法
ASP.NET 4 では、ViewStateMode プロパティ(**)が追加されました。ViewStateMode プロパティが用意された事で ViewState が必要なサーバーコントロールだけを設定する事ができるようになりました。
(**) ViewStateMode: 「Enabled」ViewState 有効。「Disabled」ViewState 無効。「Inherit 」親のプロパティ値を継承。デフォルトは「Inherit 」
Page クラスの ViewState を設定する
ASP.NET 4 では ViewStateMode プロパティが追加されましたが、何も設定しないと今までと同じで ViewState は有効になっています。 それは、サーバーコントロールの親である Page クラスとサーバーコントロールの ViewStateMode プロパティのデフォルト値に原因があります。
・Page クラスの ViewStateMode プロパティのデフォルト値: 「Enabled」
・サーバーコントロールの ViewStateMode プロパティのデフォルト値: 「Inherit」
親の Page クラスの ViewState の設定が有効となっているため、自動的に子のサーバーコントロールのViewState も有効となっていました。
そこで、
<%@ Page ViewStateMode="Disabled" %>
と記述することで、そのページに配置している全てのサーバーコントロールのViewState を無効にすることができます。あとはViewState を有効にしたいサーバーコントロールのViewStateMode プロパティ値を「Enabled」とするだけです。
ViewState の生成条件にご注意ください。
ViewState はポストバック処理とセットで必要な機能ですので、ポストバック処理がないページには ViewState は生成されません。Form コントロールがページ内に配置されるとViewStateが生成されるようになります。
従って、Form コントロールの外に配置されたサーバーコントロールに ViewState の設定をしてもそれは意味がありませんので、ご注意ください。
いかがでしたでしょうか? ViewState の設定もポイントを押さえておけば簡単に行うことができます。
武田正樹
(おまけ)あまりお勧めしませんが、ViewState をもっと設定する。
Page クラスには、 EnableViewStateMac なるプロパティも存在します。このプロパティは、ViewState が改ざんされていないかをチェックするViewState MAC ( Mesasage Authentication Check) 機能についての設定になります。
EnableViewStateMac プロパティ値はもちろんデフォルトで「True」となっていますが、「False」と設定することで、ViewStateMACを無効にできます。これによって生成される ViewState の文字列を短くすることができますが、劇的に短縮するわけではないので、お勧めはしません。