ViewStateModeの違いによる動作の違い - ASP.NET

ASP.NETのコントロールのViewStateModeの違いによる動作の違いを紹介します。

Labelコントロールの動作の違い

UIの作成

ASP.NETプロジェクトを新規作成し、Webフォームを作成します。WebフォームにLabelを2つ、Buttonを1つ配置します。(下図参照)


片方のLabel(Label2)のViewStateModeプロパティを"Disabled"にします。


コード

以下のコードを実装します。

default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ViewStateModeDemo
{
  public partial class default1 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (IsPostBack == false) {
        Label1.Text = "init value";
        Label2.Text = "init value";
      }
    }
  }
}
解説
ポストバック時でない場合はLabel1,Label2に"init value"の文字列を表示します。

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs"
  Inherits="ViewStateModeDemo.default1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <div><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
      <div><asp:Label ID="Label2" runat="server" Text="Label"
        ViewStateMode="Disabled"></asp:Label></div>
      <asp:Button ID="Button1" runat="server" Text="Button" />       
    </div>
    </form>
</body>
</html>

実行結果

アプリケーションを実行します。下図の画面が表示されます。


ボタンをクリックします。クリック後ページが切り替わりますが、ViewStateModeをDisabledに設定したラベルはUI設計時のデフォルトの文字列"Label"のテキストが表示されます。

解説

ViewStateModeを有効にした場合はポストバック時にコントロールに設定された内容が保持されます。一方、ViewStateModeが無効の場合はコントロールに設定した内容はポストバック時には失われます。ポストバック後にコントロールの設定内容を保持する必要が無い場合はViewStateModeを無効にすることでViewState情報を減らせます。

テキストボックスの場合

UIの作成

以下のUIを作成します。TextBoxを2つ、Buttonを1つ配置します。


片方のTextBoxのViewStateModeをDisabledに設定します。


コード

以下のコードを記述します。

textbox.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ViewStateModeDemo
{
  public partial class textbox : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (IsPostBack == false) {
        TextBox1.Text = "init value";
        TextBox2.Text = "init value";
      }
    }
  }
}

textbox.aspx

<%@ Page Language="C#" AutoEventWireup="true"
  CodeBehind="textbox.aspx.cs" Inherits="ViewStateModeDemo.textbox" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
    <div><asp:TextBox ID="TextBox2" runat="server" ViewStateMode="Disabled"></asp:TextBox></div>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    
    </div>
    </form>
</body>
</html>

実行結果

実行すると下図の画面が表示されます。ボタンをクリックするとページが変わりますが、テキストボックスに表示される内容は変わりません。


テキストボックスに別の値を入力してボタンをクリックした場合も、ポストバック後のページでもテキストボックスに表示される内容は変わりません。


解説

テキストボックスの場合はテキストボックスに入力された文字列はポストされるため、ViewStateModeの有効、無効にかかわらずテキストボックスの内容は保持されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2018-02-11
作成日: 2011-10-31
iPentec all rights reserverd.