السلام عليكم ورحمة الله وبركاته
احد المشاكل التي قد تواجهها في بعض الحالات في ال asp.net هو اعادة تنفيذ حدث تحميل الصفحة مع كل حدث يتم تنفيذه في الصفحة مثل حدث الضغط على زر او غيره
فمثلا في صفحة تحديث معلومات او حقول معينه في قاعدة البيانات ولنفرض اننا سوف نقوم بنحديث حقل واحد في قاعدة البيانات وهو حقل اسم الطالب
في صفحة update.aspx
وفي حدث تحميل الصفحة نقوم بجلب قيمة حقل اسم الطالب في قاعدة البيانات من الجدول المخصص له وبعد هذا نفرغ القيمة العائده لنا في داخل TextBox
طبعا يكون لدينا زر Button بعد ان يدخل المستخدم القيمة الجديدة لاسم الطالب ويضغط على هذا الزر وهو زر تحديث البيانات يتم تحديث حقل اسم الطالب في قاعدة البيانات ووضع فيه القيمة الموجوده في ال TextBox والتي يكون المستخدم غيرها فعند تحميل الصفحة تكون هذه القيمة هي نفس الموجوده في قاعدة البيانات يقوم المستخدم بتغييرها والضغط على زر التحديث
جربها بهذا الشكل سوف تلاحظ ان الحقل لم يتم تحديثه ومازال نفس القية الاصليه له !!!!!!!!!!!
فلو كان الاسم الموجود في حقل قاعدة البيانات هو ahmad
عند تحميل الصفحة سوف يكون محتوى ال TextBox هو ahmad
سيقوم المستخدم بتغييره الي mohammad ومن ثم الضغط على زر تحديث البيانات
في زر تحديث البيانات سوف يقوم بجلب الاسم الموجود في التكست بوكس TextBox وهو mohammad وتحديث حقل الاسم في قاعدة البيانات ليكون mohammad
ولكن الحقيقه انه حتى هنا سوف يقوم بتحديث حقل الاسم ليضع به ahmad مرة اخرى
فهما هو السبب ؟ واين ذهب اسم mohammad ؟ وماهو احل ؟
في بداية الموضوع قلنا انه حدث تحميل الصفحة يتم تنفيذه عند حدوث اي حدث داخل الصفحة
فلو كان حدث تحميل الصفحة لدينا Textbox1.text = "ahmad"
ووضعنا اسم mohammad في داخل التكست بكوس textbox
فم نفذنا اي حدث من احداث الادوات على الصفحة مثل حدث الضغط مرة واحده على الزر Button
فسوف يتم تحميل وتنفيذ حدث تحميل الصفحة مرة اخرى ومن ثم تنفيذ حدث الموجود في الزر Button وهذا يعني انه سوف يقوم بتنفيذ الكود textbox1.text="ahmad" مرة اخرى قبل تنفيذ الكود الموجود في حدث الضغط على زر Button
الان فهمنا ماهو السبب الذي يمنع تحديث حقل قاعدة البيانات ؟؟؟
السبب انه سوف يقوم اولا بتنفيذ كود حدث تحميل الصفحة يعني سوف يقوم بجلب القيمة الاصلية للحقل من جديد ومن ثم افراغها في ال TextBox
وهذا يعني انه سوف يلغي الاسم mohammad ويضع بدلا منه ahmad ومن ثم يقوم بتنفيذ كود الزر Button وهو كود تحديث الحقل ويضع في الحقل القيمة الموجوده في ال TextBox والتي اصبحت ahmad مرة اخرى
هذا الامر لا تلاحظه اثناء تنفيذ المشروع طبعا ولكن يمكنك ملاحظته عند تتبع الكود اثناء التنفيذ
قم بوضع مؤشر الماوس على اول سطر في حدث تحميل الصفحة ومن ثم اضغط F9
سوف يتم تضليل السطر بلون احمر ووضع نقطة حمراء كبيره بجانبه
هذا يعني انه سوف يتم تتبع كود البرنامج خطوة خطوة اثناء التنفيذ
قم بتنفيذ مشروع بالضغط على F5
سوف تلاحظ ان تنفيذ المشروع قد توقف عند السطر الذي اشرت عليه سابقا
والان اضغط F10 ليتم تنفيذ المشروع سطر سطر واستمر بالضغط على F10 وتتبع الكود
هكذا تتبع الكود وتفهم جيدا ماسوف يتم عمله وماهي الخطوة التي سوف تسبق تنفيذها
انصح المبتدئين في تعلم اللغة استخدام هذه الطريقة في تتبع الكود كثيراً لانها تولد لديك قدرة فيما بعد على الاندماج مع مشروعك اكثر وتتبع الاكواد هذا يحل لك احيانا مشاكل كبيره عندما تتوقع انت انه سيتم تنفيذ كود 1 ومن ثم كود 2 وفي الحقيقه يتم تنفيذ كود 2 اولا ومن ثم كود1
هذه الطريقة سوف تقطع لك الشك باليقين للتأكد
الان نعود الي موضوعنا
ماهو الحل في عملية تحديث الصفحة لكي اجعله يقوم بتحديث الحقول ووضع اسم mohammad به
احل هو في Page.IsPostBack
هذه تعود لنا ب False في حالة كان هذا اول مرة لدخول الصفحة بطريقة طبيعيه وليس اعادة تحميل الصفحة مثل تنفيذ احد الاحداث التابعه لاحد العناصر
يعني عند دخول الصفحة بشكل طبيعي لاول مرة فان Page.IsPostBack تعود لنا بقيمة False
بينما عند تنفيذ اي حدث مثل الضغط على زر Button فانها سوف تعود لنا بالقيمة True
الان عرفنا كيف نحل المسألة صار بمقدونا ان نجعل كود جلب البيانات من قاعدة البيانات وافارغها في ال TextBox وهو الموجود في حدث تحميل الصفحة يتم تنفيذه فقط مرة واحد عند اول دخول للصفحة بينما عند الضغط على الزر Button لايتم تنفيذه وذلك من خلال وضعه في داخل جملة شرطيه هكذا
If Page.IsPostBack = False Then
هنا كود جلب المعلومات من قاعدة البيانات
وافراغها في الحقول المخصصة لها
EndIF
عند اول دخول للصفحة سوف تعود لنا Page.IsPostBack ب False لذلك سوف يتم تنفيذ كود جلب المعلومات وافراغها في الحقول المخصصة لها
بينما عند الضغط على الزر Button سوف تعود Page.IsPostBack ب True
وهذا يعني انه لن يتحقق الشرط اعلاه ولن يدخل ليجلب البيانات ويفرغها في الحقول مرة اخرى
يعني سوف تبقى ال TextBox تحتوي على القيمة mohammad والتي ادخلتها
وسوف يتم تحديثها في قاعدة البيانات
ان شاء الله اكون وفقت بالشرح
في امان الله