تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس السادس والسبعون - ASP.net - الجزء الثالث
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


State Management :

لعلك ومن خلال تجاربك في تطوير Stand alone Application تدرك انك وقت تعريفك لمتغير ما فسيظل هذا المتغير محتفظاً بقيمته حتى انهاء البرنامج أو الخروج خارج ال Scope الخاص بهذا المتغير ، إلا أن هذا الوضع مختلف تماماً في ASP.net حيث ستضيع قيم المتغيرات مع أول تعديل ، لذا كان من اللازم عليك أن تقوم بتخزين متغيراتك وقيم بحيث يمكنك استرجاعها ، وهو ما سنتعرف على بعض تقنياته في هذا الدرس .

يمكنك تخزين القيم بواحدة من ستة طرق اساسية :

- View state .
- Control state .
- Application-Level Variables
- Cache .
- Session .
- Cookies .


وسنتعرف عليها خلال هذا الدرس إن شاء الله .
}}}}
تم الشكر بواسطة:
#2
Control state :

هي الطريقة الأسهل للاحتفاظ بالبيانات ، كل ما عليك هو تغيير القيمة EnableViewState لأي أداة حتى ولو للصفحة ككل ، في هذه الحالة القيم الموجودة في أي من أدواتك لن تتأثر وستظل محتفظة بقيمتها حتى اغلاق الصفحة .

لو فتحت ال HTML الناتج عن المتصفح لصفحة تستخدم View State ستجد الجزء التالي حيث يحتفظ ال ViewState بقيمته .

كود :
[color=#ff8000]<input type=[COLOR=#0000ff]"hidden"[/color] name=[color=#0000ff]"__VIEWSTATE"[/color] id=[color=#0000ff]"__VIEWSTATE"[/color] value=[color=#0000ff]"/wEPDwUKMTIxNDIyOTM0Mg9kFgICAw9kFgICAQ8PFgIeBFRleHQFBWFobWVkZGRkCq8FGqyXBP0pBDpvdnycvM5zSQE="[/color] />[/COLOR]
خطأ شائع :
أحياناً ما تحتاج لإن تقوم بملء محتويات قائمة لديك في حدث ال Form_Load ، اغلب الناس تستخدم الاسلوب التالي :
C#:

كود :
ListBox1.Items.Add("Ahmed");
ListBox1.Items.Add("Mohammed");
ListBox1.Items.Add("Ali");
vb.net:

كود :
ListBox1.Items.Add("Ahmed")
ListBox1.Items.Add("Mohammed")
ListBox1.Items.Add("Ali")
في الواقع هذه الطريقة متعبة جداً ، خصوصاً لو كان ملء القائمة يتم من خلال قاعدة البيانات !!!

الحل البديل ، هو الاعتماد على خاصية EnableViewState ، واستخدام الخاصية IsPostBack للتأكد من أننا نقوم بملأها في المرة الأولى فقط بالشكل التالي :

C#:

كود :
if (!IsPostBack)
{
ListBox1.Items.Add("Ahmed");
ListBox1.Items.Add("Mohammed");
ListBox1.Items.Add("Ali");
}
vb.net:

كود :
If Not IsPostBack Then
ListBox1.Items.Add("Ahmed")
ListBox1.Items.Add("Mohammed")
ListBox1.Items.Add("Ali")
End If
}}}}
تم الشكر بواسطة:
#3
View state :

طريقة أخرى تعتمد على نفس المفهوم ولكن بعيداً عن الأدوات ، حيث يمكنك مثلاً كتابة الكود التالي لتخزين قيمة ما بنفس الطريقة :
C#:

كود :
ViewState["CustomViewStateItem"] = "Ahmed";
vb.net:

كود :
ViewState("CustomViewStateItem") = "Ahmed"
ولاستعادته :
C#:

كود :
Label1.Text = (string)ViewState["CustomViewStateItem"];
vb.net:

كود :
Label1.Text = DirectCast(ViewState("CustomViewStateItem"), String)
}}}}
تم الشكر بواسطة:
#4
Session :
طريقة سهلة التعامل جداً ، وبنفس طريقة View State السابقة مع اختلاف التكنيك فقط ، للكتابة :

C#:

كود :
Session["mySession"] = "Ahmed";
vb.net:

كود :
Session("mySession") = "Ahmed"
والاستعادة :
C#:

كود :
string name = (string) Session["mySession"];
vb.net:

كود :
Dim name As String = DirectCast(Session("mySession"), String)
يمكنك عمل Remove لأي Session بالشكل التالي :
C#:

كود :
Session.Remove["mySession"];
vb.net:

كود :
Session.Remove("mySession")
كما أن هناك خاصية Timeout والتي تحدد فترة احتفاظ ال Session بقيمته بالدقائق ، وافتراضياً هي 20 دقيقة :


كود :
Session.Timeout = 5
}}}}
تم الشكر بواسطة:
#5
Cookies :

طريقة أخرى من وسائل الاحتفاظ بالقيم ولكن عند جهاز العميل ، حيث يتم الاحتفاظ بهذه القيم في ملفات نصية ( في اغلب الاحيان ) ولكن ينبغي مراعاة ان يكون متصفح العميل يسمح بمثل هذه العملية ، وهي الطريقة الأكثر شهرة في الاحتفاظ بمعلومات الدخول والتسجيل في المواقع المختلفة .
وهي مشتقة من الفئة System.Web.HttpCookie .

سنجرب الآن مثالاً على الكوكيز ، حيث سنقوم بتسجيل اختيار المستخدم من الألوان - اللون الاخضر أو الأحمر مثلاً -، ومع كل تشغيل للموقع في حالة وجود كوكيز يتم استخدام اللون المفضل ، وإلا يتم اللجوء للون الافتراضي وهو الأصفر مثلاً .

سنقوم برسم الصفحة اولاً باللون الافتراضي الأصفر :


الكود الخاص بها :

كود :
[color=#000080]<asp:Panel ID=[COLOR=#0000ff]"Panel1"[/color] runat=[color=#0000ff]"server"[/color] Height=[color=#0000ff]"134px"[/color] Width=[color=#0000ff]"446px"[/color] BackColor=[color=#0000ff]"Yellow"[/color]>[/COLOR]
قم باختيار اللون المطلوب :[color=#000080]<br />[/color]
[color=#000080]<br />[/color]
[color=#000080]<asp:RadioButton ID=[COLOR=#0000ff]"RadioButton1"[/color] runat=[color=#0000ff]"server"[/color] Text=[color=#0000ff]"أخضر"[/color] GroupName=[color=#0000ff]"colors"[/color] />[/COLOR]
[color=#000080]<br />[/color]
[color=#000080]<asp:RadioButton ID=[COLOR=#0000ff]"RadioButton2"[/color] runat=[color=#0000ff]"server"[/color]
oncheckedchanged=[color=#0000ff]"RadioButton2_CheckedChanged"[/color] Text=[color=#0000ff]"أحمر"[/color] GroupName=[color=#0000ff]"colors"[/color]/>[/COLOR]
[color=#000080]<br />[/color]
[color=#000080]<br />[/color]
[color=#000080]<asp:Button ID=[COLOR=#0000ff]"Button1"[/color] runat=[color=#0000ff]"server"[/color] Text=[color=#0000ff]"تطبيق"[/color] onclick=[color=#0000ff]"Button1_Click1"[/color] />[/COLOR]
[color=#000080]</asp:Panel>[/color]
والآن ، سنقوم بانشاء كوكيز نخزن فيه اللون المختار حالياً بالشكل التالي في حدث الضغط على زر ( تطبيق ) ، وسنعطي هذا الكوكيز تاريخاً للانتهاء :
C#:

كود :
string color;
if (RadioButton1.Checked)
{
color = "Green";
Panel1.BackColor = System.Drawing.Color.Green;
}
else if (RadioButton2.Checked)
{
color = "Red";
Panel1.BackColor = System.Drawing.Color.Red;
}
else
color = "";
HttpCookie Cookie = new HttpCookie("myColor", color);
Cookie.Expires = DateTime.Parse("01/01/2009");
Response.Cookies.Add(Cookie);
vb.net:

كود :
Dim color As String
If RadioButton1.Checked Then
color = "Green"
Panel1.BackColor = System.Drawing.Color.Green
ElseIf RadioButton2.Checked Then
color = "Red"
Panel1.BackColor = System.Drawing.Color.Red
Else
color = ""
End If
Dim Cookie As New HttpCookie("myColor", color)
Cookie.Expires = DateTime.Parse("01/01/2009")
Response.Cookies.Add(Cookie)
والآن في حدث ال Form_Load للتشغيل ، سنقوم بقراءة الكوكيز ، وفي حالة وجود myColor فسيتم معرفة قيمته :

C#:

كود :
if (Request.Cookies["myColor"]!=null)
{
string color = Request.Cookies["myColor"].Value;
if (color=="Green")
Panel1.BackColor = System.Drawing.Color.Green;
else if (color=="Red")
Panel1.BackColor = System.Drawing.Color.Red;
}
vb.net:

كود :
If Request.Cookies("myColor") IsNot Nothing Then
Dim color As String = Request.Cookies("myColor").Value
If color = "Green" Then
Panel1.BackColor = System.Drawing.Color.Green
ElseIf color = "Red" Then
Panel1.BackColor = System.Drawing.Color.Red
End If
End If
}}}}
تم الشكر بواسطة:
#6
Application .
طريقة أخرى مشتقة من HttpApplicationState ، ولكن من خلالها لا يتم تخزين البيانات لعميل واحد ، بل يتم تخزين بيانات يمكن ان تصل لجميع العملاء ، ابسط مثال لها هو عدد الزوار والذي ينبغي ان يكون مؤثراً عند جميع العملاء وليس عميل واحد فقط .
تحتوي هذه الفئة على الدوال والخصائص التالية :

Add() : اضافة عنصر جديد باسم جديد للقائمة .
AllKeys : استعراض جميع العناصر الموجودة .
Count : معرفة عدد العناصر الموجودة .
Lock(), Unlock() : السماح او عدم السماح بتعديل المجموعة .
RemoveAll(), Remove(), RemoveAt() : تستخدم لحذف عنصر في نقطة معينة ، أو باسم معين ، أو حذف الكل وذلك على الترتيب .


يمكنك اضافة Application جديد بالشكل التالي :
C#:

كود :
Application["Visitors"] = 1;
vb.net:

كود :
Application("Visitors") = 1
ويمكن استعادتها في مربع عنوان مثلاً :
C#:

كود :
labelVistor.Text=(string)Application["Visitors"];
vb.net:

كود :
labelVistor.Text = DirectCast(Application("Visitors"), String)
ولتعديل قيمة مثلاً :
C#:

كود :
Application["Visitor"]= ((int)Application["Visitor"])+1;
vb.net:

كود :
Application("Visitor") = CInt(Application("Visitor")) + 1
*** لاتنس ان محتويات ال Application قد لا تكون نص فقط ، بل قد تكون مصفوفة من الفئات مثلاً ...
}}}}
تم الشكر بواسطة:
#7
Cache :
تقنية أخرى مختصة بالتطبيق عند جميع أجهزة العملاء ، ولكن يمكنك تحديد فترة معينة فقط لها ، لانشاءها نستخدم الأمر التالي مثلاً :
C#:

كود :
Context.Cache["myCache"] = "hii, my first cache";
vb.net:

كود :
Context.Cache("myCache") = "hii, my first cache"
وللاستعادة :
C#:

كود :
string myCache = (string)Context.Cache["myCache"];
vb.net:

كود :
Dim myCache As String = DirectCast(Context.Cache("myCache"), String)
}}}}
تم الشكر بواسطة:
#8
Global.asax :آخر جزئية لدينا في درس اليوم هي استخدام ملف Global.asax لتخزين متغيرات Global ودوال يمكن الوصول إليها من اي صفحة ، قم باضافة عنصر جديد وقم باختيارها بالشكل التالي :
بعد اضافتك لهذه الصفحة ، ستجد بها افتراضياً الأكواد التالية :وكما لاحظت ، تحوي هذه الصفحة على تعريفات لدوال رئيسية خاصة بالتعامل مع كافة انواع ال State Management ، اضافة لحالة حدوث الأخطاء Application_Error وغيرها من دوال تفيد في ادارة كامل صفحات المشروع ، ويمكنك الاستفادة منها في جميع استخداماتك لعناصر State Management المختلفة التي تعرفنا عليها في هذا الدرس .
والله الموفق ...والسلام عليكم ورحمة الله وبركاته .
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الأول : تحميل .net 2008 ومميزات استخدامه oneyemenweb2 1 669 07-03-13, 02:04 AM
آخر رد: abdoojh
  اعلان - انتهاء الدورة - الدرس التاسع والسبعون -) RaggiTech 0 598 14-10-12, 11:23 PM
آخر رد: RaggiTech
  الدرس الثامن والسبعون - Ajax RaggiTech 2 868 14-10-12, 11:22 PM
آخر رد: RaggiTech
  الدرس السابع والسبعون - ASP.net وقواعد البيانات RaggiTech 2 906 14-10-12, 11:19 PM
آخر رد: RaggiTech
  الدرس الخامس والسبعون - ASP.net - الجزء الثاني RaggiTech 5 1,310 14-10-12, 11:07 PM
آخر رد: RaggiTech
  الدرس الرابع والسبعون - ASP.net RaggiTech 6 1,085 14-10-12, 10:58 PM
آخر رد: RaggiTech
  الدرس الثالث والسبعون - مقدمة إلى تطوير المواقع RaggiTech 4 843 14-10-12, 10:44 PM
آخر رد: RaggiTech
  الدرس الثاني والسبعون - مقدمة إلى Mono RaggiTech 0 594 14-10-12, 10:37 PM
آخر رد: RaggiTech
  الدرس الواحد والسبعون - XML Commenting RaggiTech 2 793 14-10-12, 10:35 PM
آخر رد: RaggiTech
  الدرس السبعون - مقدمة إلى wcf RaggiTech 4 831 14-10-12, 10:26 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم