ViewStateModeプロパティ
ASP.NETではViewStateを利用することでステートレスなWebページの情報を保持できます。しかし、ViewStateは仕組み上、HTMLソース内にhidden属性の値を大量に埋め込みます。ページに多くのコントロールが使用されていればいるほど、ViewStateは多く生成され、アプリケーションのパフォーマンスを大きな影響を与えます。
ASP.NET 4で追加されたViewStateModeプロパティは、ページ全体(ページディレクティブ)に適用、入れ子元のコントロール、そして個々のコントロールと範囲指定でViewState利用の可否に関する設定を可能にするプロパティです(図3~4)。


値はViewStateMode列挙体から選択します。
| 値 | 概要 |
| Inherit | 入れ子元のViewStateModeの値を継承(サーバーコントロールの既定値) |
| Enabled | 入れ子元のViewStateModeの値が無効でも有効に切り替える(ページディレクティブ内の属性の既定値) |
| Disabled | 入れ子元のViewStateModeの値が有効でも無効に切り替える |
それではViewStateModeプロパティの記述を紹介します。まずはサーバーコントロールの記述方法です。
<h2><asp:Label ID="Label1" runat="server" Text="ViewState生成しません" ViewStateMode="Disabled"></asp:Label></h2> <br /> <h2><asp:Label ID="Label2" runat="server" Text="ViewState生成します"></asp:Label></h2> <br /> <asp:Button ID="Button1" runat="server" Text="ポストバック"/>
ラベルコントロールを2つ配置し、ViewStateModeをDisabledに設定しています。ボタンコントロールはポストバックを行うためだけに配置しています。続いてサーバーサイドの記述です。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Label1.Text = "ViewStateMode = Disabled設定のラベル";
Label2.Text = "ViewStateMode = Enable設定のラベル";
}
}
!IsPostBackにより、初回実行時に各テキストを表示させています。これらの設定完了後に実行することで、初回に設定された値をポストバックした際にViewStateで値を保持するか、ラベルコントロールが本来持つテキストが表示されるか判別できます。実行結果は図3~4の通りです。
ViewStateModeには注意点が1つあります。それはEnableViewStateプロパティです。ViewStateModeプロパティは、EnableViewStateプロパティがTrueの時のみ効果を発揮します。つまり、ページ ディレクティブで、EnableViewStateプロパティをFalseに設定している場合は、そのページでViewStateModeプロパティは効果を発揮しません。
最初にも書いたようにViewStateはアプリケーションのパフォーマンスに大きな影響を与えます。範囲指定によるViewStateの利用設定が可能になるので、開発生産性のアップとユーザービリティの向上に繋がるでしょう。
