ASP.NET 徹底活用術のホームへ戻る

■ビューステートを無効にする

 

● Webページのすべてのビューステートを無効にする ~ViewState1.aspx

 

DataGridなどのデータコントロールにデータベースをバインドすると、ビューステート(ViewState)DataGridに表示されているデータが保存されます。たとえば、DataGridに得意先テーブルの得意先IDと得意先名を10行表示すると、1592バイトのビューステートが保存されます。

 

DataGridにデータベースをバインドして表示(ページングも可能)させるときは、Webページ全体のビューステートを無効にしてビューステートのサイズを小さくすることができます。Webページのすべてのビューステートを無効にするには、@PageディレクティブにEnableViewState=”False”を追加します。この場合、ビューステートのサイズが1592バイトから48バイトに縮小されます。

 

<%@ Page Language="VB" EnableViewState="False" %>

 

ビューステートはエンコードされていますので、サイズを比較したり内容を解析するにはデコードする必要があります。ここでは、Fritz Onion氏が作成した「ViewState Decoder(1.1)」を使用してサイズを比較します。ViewState Decoderは、以下のサイトから無償にてダウンロードすることができます。

 

http://www.pluralsight.com/tools.aspx

 

ViewState Decoderを利用すると、ビューステートをツリー構造で表示したり、TEXT/XML形式で表示して内容を解析することができます。

 

5: DataGridに得意先テーブルを10行表示

 

6 EnableViewState=”True”を指定したときのビューステートのサイズと内容

 

 

7EnableViewState=”False”を指定したときのビューステートのサイズと内容

 

 

● 特定のコントロールのビューステートを無効にする ~ViewState3.aspx

 

@PageディレクティブにEnableViewState=”False”を指定してビューステートを無効にしても、DataGridのページング処理は正常に動作しますが、編集処理などは動作しません。この場合、@Pageディレクティブの代わりにDataGridの行(DataGridItem)EnableViewStateプロパティにFalseを設定します。

 

DataGaridの行のビューステートを無効にすると、ビューステートのサイズを1692バイトから336バイトに縮小させることができます。

 

Webページが初めてロードされたときBindGridメソッドを実行

Sub Page_Load(sender As Object, e As EventArgs)

  If Not IsPostBack Then

    BindGrid()

  End If

End Sub

 

‘ 商品テーブルが格納されているDataTableをキャッシングする

Sub BindGrid()

  mdtProducts = Cache("Products")

  If mdtProducts Is Nothing Then

    mdtProducts = CreateDataTable()

  End If

  DataGrid1.DataKeyField = "CustomerID"

  DataGrid1.DataSource = mdtProducts

  DataGrid1.DataBind()

  DisableViewState(DataGrid1)

End Sub

 

DataGridItemのビューステートを無効にする

Sub DisableViewState(dg As DataGrid)

  For Each dgi As DataGridItem In dg.Items

    dgi.EnableViewState = False

  Next

End Sub

 

 

8: DataGridItemのビューステートを無効にしてレコード編集

ASP.NET 徹底活用術のホームへ戻る