ASP.NET Web Forms - ViewState を維持する
Web フォーム内でオブジェクトの ViewState(ビューステート)を維持することで、大量のコーディング作業を省くことができます。
ViewState(ビューステート)を維持する
クラシック ASP では、フォームが送信されると、すべてのフォーム値がクリアされます。大量の情報を含むフォームを送信し、サーバーがエラーを返したとします。フォームに戻って情報を修正する必要があります。戻るボタンをクリックすると、何が起こるでしょうか...すべてのフォーム値がクリアされ、すべてを最初からやり直さなければなりません。サイトはあなたの ViewState を維持していません。
ASP.NET では、フォームが送信されると、フォームは入力された値とともにブラウザウィンドウに表示されます。どうやって実現しているのでしょうか?それは、ASP.NET があなたの ViewState を維持しているからです。ViewState は、ページがサーバーに送信されるときにその状態を示します。この状態は、<form runat="server"> コントロールを含む各ページに非表示フィールドを配置することで定義されます。ソースコードは次のとおりです:
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTI0ODU5MDE1Ozs+ZBCF2ryjMpeVgUrY2eTj79HNl4Q=" />
.....some code
</form>
ViewState の維持は、ASP.NET Web フォームの既定の設定です。ViewState を維持したくない場合は、.aspx ページの先頭にディレクティブ <%@ Page EnableViewState="false" %> を含めるか、任意のコントロールに属性 EnableViewState="false" を追加します。
次の .aspx ファイルを見てください。これは「従来の」動作方法を示しています。送信ボタンをクリックすると、フォームの値は消えてしまいます:
サンプル
<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 を維持するためにフォーム内に非表示フィールドを追加していることがわかります。
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>
サンプルを見る »