ASP.NET - การรักษา ViewState
- หน้าก่อนหน้า ฟอร์ม WebForms
- หน้าต่อไป TextBox WebForms
ด้วยการรักษา 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 ดำเนินต่อไปได้)
- หน้าก่อนหน้า ฟอร์ม WebForms
- หน้าต่อไป TextBox WebForms