ASP.NET Web Forms - ViewState を維持する


Web フォーム内でオブジェクトの ViewState(ビューステート)を維持することで、大量のコーディング作業を省くことができます。


ViewState(ビューステート)を維持する

クラシック ASP では、フォームが送信されると、すべてのフォーム値がクリアされます。大量の情報を含むフォームを送信し、サーバーがエラーを返したとします。フォームに戻って情報を修正する必要があります。戻るボタンをクリックすると、何が起こるでしょうか...すべてのフォーム値がクリアされ、すべてを最初からやり直さなければなりません。サイトはあなたの ViewState を維持していません。

ASP.NET では、フォームが送信されると、フォームは入力された値とともにブラウザウィンドウに表示されます。どうやって実現しているのでしょうか?それは、ASP.NET があなたの ViewState を維持しているからです。ViewState は、ページがサーバーに送信されるときにその状態を示します。この状態は、<form runat="server"> コントロールを含む各ページに非表示フィールドを配置することで定義されます。ソースコードは次のとおりです:

<form name="_ctl0" method="post" action="page.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTI0ODU5MDE1Ozs+ZBCF2ryjMpeVgUrY2eTj79HNl4Q=" />

.....some code

</form>

ViewState の維持は、ASP.NET Web フォームの既定の設定です。ViewState を維持したくない場合は、.aspx ページの先頭にディレクティブ <%@ Page EnableViewState="false" %> を含めるか、任意のコントロールに属性 EnableViewState="false" を追加します。

次の .aspx ファイルを見てください。これは「従来の」動作方法を示しています。送信ボタンをクリックすると、フォームの値は消えてしまいます:

サンプル

<html>
<body>

<form action="demo_classicasp.aspx" method="post">
Your name: <input type="text" name="fname" size="20">
<input type="submit" value="Submit">
</form>
<%
dim fname
fname=Request.Form("fname")
If fname<>"" Then
Response.Write("Hello " & fname & "!")
End If
%>

</body>
</html>

サンプルを見る »

次は、新しい ASP.NET の方法です。送信ボタンをクリックしても、フォームの値は消えません:

サンプル

サンプルの右側のフレームにある「ソースコードを表示」をクリックすると、ASP.NET が ViewState を維持するためにフォーム内に非表示フィールドを追加していることがわかります。

<script runat="server">
Sub submit(sender As Object, e As EventArgs)
lbl1.Text="Hello " & txt1.Text & "!"
End Sub
</script>

<html>
<body>

<form runat="server">
Your name: <asp:TextBox id="txt1" runat="server" />
<asp:Button OnClick="submit" Text="Submit" runat="server" />
<p><asp:Label id="lbl1" runat="server" /></p>
</form>

</body>
</html>

サンプルを見る »
その他の拡張