ASP.NET Web フォーム - ViewState の維持
ViewState は Web フォームに基づいています。Web フォーム コントロール属性で runat = "server" を設定すると、このコントロールには、ViewState のすべてのコントロールのステータス値が格納されます。このセクションでは、ASP.NET が ViewState を維持する方法を紹介します。
Web フォーム内のオブジェクトの 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=" />... ..コード</form>
ViewState の維持は、ASP.NET Web フォームのデフォルト設定です。 ViewState を維持したくない場合は、.aspx ページの先頭にディレクティブ <%@ Page EnableViewState="false" %> を含めるか、属性 EnableViewState="false" をコントロールに追加します。
以下の .aspx ファイルを参照してください。これは「古い」操作方法を示しています。送信ボタンをクリックすると、フォームの値が消えます。
<html><body><form action="demo_classicasp.aspx" method="post">あなたの名前: <input type="text" name="fname" size="20"><input type="submit" value ="Submit"></form><%dim fnamefname=Request.Form("fname")If fname<>"" thenResponse.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">あなたの名前: <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>