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 の文字列を短くすることができますが、劇的に短縮するわけではないので、お勧めはしません。