يعلم الجميع أن Asp.Net يستخدم ViewState لحفظ المعلومات الموجودة في الصفحة والمعلومات المحددة من قبل المستخدم بين العميل والخادم.
في الإصدارات السابقة للإصدار 2.0، يتم تخزين ViewState في عناصر تحكم مخفية على الصفحة: __VIEWSTATE
لا يمكننا تغيير كيفية ومكان حفظ ViewState.
الآن في الإصدار 2.0، فتحت Asp.Net هذه الميزة، مما يسمح لي بتخصيص موقع حفظ ViewState.
تمت إضافة سمة جديدة إلى فئة الصفحة في 2.0: PageStatePersister.
يمكننا تجاوز هذه الخاصية لتنفيذ حفظ ViewState المخصص. تقوم هذه الخاصية بإرجاع مثيل لفئة فرعية موروثة من فئة PageStatePersister.
يتم توفير طريقتين للحفظ افتراضيًا في الإصدار 2.0: إحداهما للحفظ في الصفحة (HiddenFieldPageStatePersister)، والأخرى للحفظ في الجلسة (SessionPageStatePersister).
التعليمة البرمجية التالية تتجاوز خاصية PageStatePersister وتحفظ ViewState في الجلسة:
protected override PageStatePersister PageStatePersister
{
يحصل
{
إرجاع جلسة جديدة PageStatePersister(this);
}
}
بالإضافة إلى طريقتي الحفظ الافتراضيتين، يمكننا أن نرث فئة PageStatePersister لتنفيذ طرق الحفظ الخاصة بنا.
يوضح التعليمة البرمجية التالية كيفية حفظ ViewState في ملف:
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام 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 العامة (صفحة الصفحة): القاعدة (الصفحة)
{
}
التجاوز العام تحميل باطل ()
{
ReadFile();
}
التجاوز العام باطل Save()
{
WriteFile();
}
ملف WriteFile الخاص ()
{
FileStream file = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(file, base.ViewState);
file.Flush();
file.Close();
}
ReadFile () باطلة خاصة
{
FileStream file = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
base.ViewState = bf.Deserialize(file);
}
}
في صفحات محددة:
تجاوز محمي PageStatePersister PageStatePersister
{
يحصل
{
إرجاع CWingViewState الجديد (هذا)؛
}
}
المصدر: مدونة .Net space