ASP.NET - การรักษา ViewState

ด้วยการรักษา ViewState (สถานะที่มองเห็น) ของวิตคุณในฟอร์มเว็บ คุณสามารถปลดล็อกการเขียนโค้ดมากมาย

การรักษา ViewState (สถานะที่มองเห็น)

เมื่อฟอร์มใน classic 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">
ชื่อคุณ: <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 ที่เมื่อคุณกดปุ่มส่ง ค่าฟอร์มจะไม่หายไป:

<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>

แสดงตัวอย่างนี้ (กรุณาคลิกที่กรอบด้านขวาว่า "ดูเอกสารแบบเต็ม" คุณจะเห็นว่า ASP .NET ได้เพิ่มฟิลด์ซ่อนในฟอร์ม เพื่อที่จะทำให้ViewState ดำเนินต่อไปได้)