ทุกคนรู้ดีว่า Asp.Net ใช้ ViewState เพื่อบันทึกข้อมูลในเพจและข้อมูลที่ผู้ใช้กำหนดระหว่างไคลเอนต์และเซิร์ฟเวอร์
ในเวอร์ชันก่อน 2.0 ViewState จะถูกจัดเก็บไว้ในส่วนควบคุมที่ซ่อนอยู่บนเพจ: __VIEWSTATE
เราไม่สามารถเปลี่ยนวิธีการและตำแหน่งที่จะบันทึก ViewState ได้
ขณะนี้ในเวอร์ชัน 2.0 Asp.Net ได้เปิดคุณลักษณะนี้ ทำให้ฉันสามารถปรับแต่งตำแหน่งการบันทึกของ ViewState ได้
มีการเพิ่มแอตทริบิวต์ใหม่ให้กับคลาส Page ใน 2.0: PageStatePersister
เราสามารถแทนที่คุณสมบัตินี้เพื่อใช้การบันทึก ViewState แบบกำหนดเองได้ คุณสมบัตินี้จะส่งคืนอินสแตนซ์ของคลาสย่อยที่สืบทอดมาจากคลาส PageStatePersister
มีการระบุวิธีการบันทึกสองวิธีตามค่าเริ่มต้นใน 2.0: วิธีแรกคือการบันทึกในหน้า (HiddenFieldPageStatePersister) และอีกวิธีคือการบันทึกในเซสชัน (SessionPageStatePersister)
รหัสต่อไปนี้แทนที่คุณสมบัติ PageStatePersister และบันทึก ViewState ลงในเซสชัน:
ป้องกันแทนที่ PageStatePersister PageStatePersister
-
รับ
-
ส่งคืน SessionPageStatePersister ใหม่ (สิ่งนี้);
-
-
นอกจากวิธีการบันทึกเริ่มต้นทั้งสองวิธีนี้แล้ว เรายังสามารถสืบทอดคลาส PageStatePersister เพื่อใช้วิธีการบันทึกของเราเองได้
รหัสต่อไปนี้สาธิตวิธีการบันทึก ViewState ลงในไฟล์:
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Web;
โดยใช้ System.Web.Security;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.WebControls.WebParts;
ใช้ System.Web.UI.HtmlControls;
ใช้ System.IO;
โดยใช้ System.Runtime.Serialization.Formatters.Binary;
/***////// <สรุป>
/// คำอธิบายโดยย่อของ CWingViewState
/// </สรุป>
CWingViewState คลาสสาธารณะ: PageStatePersister
-
CWingViewState สาธารณะ (หน้าเพจ): ฐาน (หน้า)
-
}
แทนที่สาธารณะ void Load()
-
อ่านไฟล์();
}
แทนที่สาธารณะถือเป็นโมฆะบันทึก ()
-
เขียนไฟล์();
} }
โมฆะส่วนตัว WriteFile()
-
ไฟล์ FileStream = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = ใหม่ BinaryFormatter();
bf.Serialize (ไฟล์, base.ViewState);
ไฟล์.ฟลัช();
ไฟล์.ปิด();
} }
โมฆะส่วนตัว ReadFile()
-
ไฟล์ FileStream = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = ใหม่ BinaryFormatter();
base.ViewState = bf.Deserialize (ไฟล์);
-
}
ในหน้าเฉพาะ:
ป้องกันแทนที่ PageStatePersister PageStatePersister
-
รับ
-
ส่งคืน CWingViewState ใหม่ (สิ่งนี้);
-
-
ที่มา: .Net space BLOG