إرسال قيم بين الصفحات باستخدام Query String - ASP.Net - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
السبت
2016-12-10
5:34 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » ASP.Net

إرسال قيم بين الصفحات باستخدام Query String
إرسال قيم بين الصفحات باستخدام Query String

مقـــدمه
مقالة اليوم تشرح كيفية استخدام Query String لإرسال قيم بين الصفحات في الروابط , وكيف يمكن استخلاص القيم المرسله من رابط او عنوان الصفحه .
Query String
الكويري سترينج هو جزء من عنوان الصفحه ويبدأ بعلامة استفهام " ؟ " , حيث نرى دائماً في روابط الصفحات وجود علامة استفهام بعد عنوان الصفحه , يتبعها متغيرات مفصوله بعلامة " & " , ويتضمن نص المتغير قيمته بعد علامة " = " , بمعنى , لنفترض ان لدينا عنوان صفحه البحث على جوجل , فعنوان الصفحه الرئيسي هو مثلاً google.com\search.aspx - على افتراض ان الصفحه بال ASP.Net - ففي هذه الصفحه تعرض نتائج البحث المطلوبه , ولكن اي نتائج سوف تعرض ؟؟ , ما هو النص الذي يبحث عنه المستخدم ؟ , كل هذا يتم ارساله عبر كويري يبدأ بعلامة استفهام بعد عنوان الصفحة مباشرة , بحيث يحتوي هذا الكويري على متغيرات مرسله الى الصفحه , ولكل متغير قيمة تتبع اسم المتغير بينهما علامة = , ويفصل بين كل متغيرين علامة & , وهذا مثال على صفحة البحث
google.com/search.aspx?txt=topcoder
فهذا الرابط يحتوي على متغير يسمى txt وقيمته = topcoder بمعنى انه - كإفتراض ليس أكثر - الصفحه تستقبل النص الذي يبحث عنه المستخدم في متغير يسمى txt بحيث تقوم الصفحه اثناء التحميل بالكشف عن المتغير , وتأتي بقيمته , ثم تعرض نتائج البحث الخاصه بهذه القيمه

google.com/search.aspx?txt=topcoder&cat=programming
هذا الرابط يحتوي على متغيرين , txt وهو يمثل نص البحث , والثاني cat بإفتراض انه يمثل التصنيف الذي سيبحث داخله محرك البحث , والمتغيرين يفصل بينهما علامه "&" , واذا وجد متغير ثالث ستوضع بينه والثاني علامة "&" أيضاً ... وهكذا يمكن ارسال العديد من المتغيرات بنفس الطريقه .

قاعدة البيانات
بإفتراض ان لدينا صفحتين , الأولى - وهي الصفحة الرئيسيه - بها أسماء الدول , والثانيه تقوم بعرض اسماء المدن التابعه لدوله معينه , بحيث يتم ارسال قيمة ID الدوله من الصفحة الاولى الى الثانيه في متغير بإسم cid , ولنقوم بجلب كل تلك البيانات من قاعدة بيانات تحتوي على جدولين , الأول به اسماء الدول , والثاني أسماء المدن , ويربطهما عمود country_id , وهذا شكل الجدولين


-- هذا الموضوع هو نفس التطبيق في مقاله سابقه , ولن يتم شرح تفاصيل كثيره هنا عن عملية الجلب من قاعدة البيانات , فسيتم التركيز على كيفية تعبئة بيانات الصفحات , للإطلاع على المقاله من الرابط
http://topcoder.ucoz.com/publ/asp_net/v_comboxes_asp_net/3-1-0-74

في قاعدة البيانات يوجد 2 proc الأول يأتي باسماء الدول من الجدول الأول , والثاني يأتي باسماء المدن حسب id دوله يتم تمريره في متغير .

هذا بإختصار جميع ما يخص قاعدة البيانات , و يمكنك تحميل ملف سكريبت الداتابيس من الرابط
http://topcoder.ucoz.com/load/5-1-0-63
الصفحة الأولى
ستحتوي الصفحة الأولى على أسماء الدول المختلفه الأتيه من قاعدة البيانات , وبالتالي لن يكون هناك نص ثابت في الصفحه , بحيث ان الصفحة ربما تكون فارغه , او على اقل تقدير سيكون المكان الذي ستوضع فيه اسماء الدول فارغ , بحيث عند تحميل الصفحة يتم جلب البيانات من قاعدة البيانات وملئ هذا المكان بها , ولتبسيط الأمور لن تحتوي صفحتنا سوى على كنترول من النوع div ستدرج به أسماء الدوال كروابط , وهذا كود html لهذا الكنترول :
Countries_List div
 
ويلاحظ اضافه الخاصيه runat=server حتى يمكن الوصول للكنترول داخل الكود من خلال id الكنترول .
والمطلوب هنا ملئ هذا الكنترول بالبيانات المطلوبه والتي تمثل أسماء الدول الاتيه من قاعدة البيانات , على هيئة روابط للصفحة الثانيه - cities.aspx - متضمنه متغير cid يحمل id الدوله التي ستعرض الصفحة الثانيه المدن التابعه لها .
بما ان الكنترول لا يحتوي على شئ ,و مطلوب منك هو تعبئته في دالة Page_Load , ولكن قبل هذا سنشرح كيف يمكن اضافة رابط وتعيين المتغيرات المرسله من خلاله الى الصفحه الثانيه :
AddCountry Link Method
 
في الدالة السابقه يتم تمرير متغيرين وهما country يمثل اسم الدوله الذي يمثل ايضاً نص الرابط الذي سيتم اضافته , والثاني id وهو يمثل كود الدوله والذي سيتم تمريره في الرابط كمتغير .
في البدايه تم تعريف كنترول يمثل رابط وهو HtmlAnchor وهو يمثل الكنترول a في تنسيق ال html , بعد ذلك يتم اضافه خصائص هذا الرابط , فأولا href وهو تأخذ عنوان الرابط وتم اضافة اسم الصفحة ثم اضافة الكويري بداية من علامة "؟" ثم المتغير المرسل وهو cid ثم قيمة المتغير بعد علامة "=" , حيث القيمة يمثلها المتغير id الذي يتم تمريره الى الداله , وبعد ذلك تم تعيين نص الرابط وهو سيكون اسم الدوله ويمثله المتغير country الذي مرر ايضا من خلال الداله , وبعد ذلك يضاف الكنترول بأكمله الى ال div .
تم عمل كنترول اخر وهو br والذي يمثل سطر جديد , ويمكننا اعتبار هذا الكنترول هو كنترول عام , فيتم اضافته من خلال الكلاس HtmlGenericControl حيث هذا الكلاس يمكن من خلاله عمل اي كنترول html , بحيث يوضع اسم الكنترول بين قوسي الكلاس , ثم اضافة هذا الكنترول (السطر) الى ال div ايضاً , بحيث يتبع كل رابط سطر كمسافه , وهذا للتنسيق ليس أكثر .
جلب البيانات من قاعدة البيانات
والان نأتي لكيفية جلب البيانات من قاعدة البيانات , وتعبئة الصفحه بهذه البيانات , وهذه الداله تقوم بجلب البيانات من قاعدة البيانات تمريرها الى الداله السابقه AddCountry لتقوم بعملها كروابط , ثم تضيفها الى الصفحه :
FillCountries Method
 
تم عمل الاتصال بقاعدة البيانات وجلب نص الاتصال من ملف web.config وهو ما تم شرحه سابقاً في المقاله السابقه , وكل التفاصيل عن هذه الداله والدوال التاليه في نفس المقاله .

ما يهمنا في الكود السابق هو الجزئيه الخاصه بتنفيذ الداله AddCountry اثناء قراءة البيانات , فيتم استخلاص اسم الدوله , والكود الخاص بها , ثم يتم تمريرهم الى الداله AddCountry لتقوم هذه الداله كما تم توضيحه سابقاً بعمل رابط ووضعه في الصفحه , ويتم ذلك مع كل الدول حسب البيانات الاتية من قاعدة البيانات , ولا يبقى الا مناداة هذه الداله في حدث Page_Load ليتم تنفيذ الداله عند تحميل الصفحه وتعبئتها بكل أسماء الدول كروابط ... وهكذا يكون الجزء الأول قد انتهى ... فالصفحة الأولى الان جاهزه للعمل , وعند الضغط على اسم دوله موجوده داخل الصفحه , سينقلك الى الصفحه الثانيه , ولكن ماذا سيظهر في الصفحه الثانيه ؟؟
الصفحه الثانيه
الصفحة الثانيه ستقوم اولا بالكشف عن المتغير cid المرسل لها من الصفحة الأولى , وعلى اساس قيمة هذا المتغير يتم الذهاب الى قاعدة البيانات , وجلب المدن التابعه لهذه الدوله , ثم عرض هذه المدن في الصفحه , وكتبسيط ايضاً لن تحتوي الصفحة سوى على كنترول div سيتم فيه اضافة اسماء المدن ككنترول span مثلاً , وهذا html الكنترول div
Cities_List div
 
وكما هو الحال في الصفحه الأولى تم اضافة runat=server ليتم الوصول الى الكنترول داخل الكود , وايضاً تم عمل داله تقوم بإضافه كنترول span يحمل اسم المدينه , واضافته الى الكنترول div كالتالي :
AddCity Method
 
لم يختلف الأمر كثيراً عن الصفحة الأولى , فبدلاً من عمل كنترول كـ HtmlAnchor والذي يمثل رابط , تم عمل كنترول span بواسطة الكلاس HtmlGenericControl والذي يمكن ان يمثل اي كنترول html , حيث لن تكون اسماء المدن روابط الى صفحات اخرى , ويمكنك تحويلها لروابط حسب حاجتك , وفي النهاية تم اضافة سطر كتنسيق ايضاً .

وبالنسبه لطريقة جلب البيانات من قاعدة البيانات , تمثلها الداله التاليه  
FillCities Method
 
يمرر للداله معامل country_id وهو يمثل كود الدوله التي ستعرض المدن التابعه لها في الصفحه , وكالسابق فانه اثناء قراءة البيانات من يتم اضافة اسماء المدن الى الكنترول div في الصفحه , وحتى الآن لم يتخلف الامر كثيراً , فالأمور متشابهه الى حد كبير .

تبقى الآن خطوه مهمه جداً , وهي مناداة هذه الداله داخل حدث page_load وتمرير المتغير country_id لها , حيث يتم قراءة هذا المتغير من كويري رابط الصفحة , ويمثله المتغير cid في الكويري , والكود التالي هو ما يتم وضعه داخل حدث تحميل الصفحة :
Page_Load  
 
ففي البدايه يتم قراءة قيمة المتغير cid من الكويري الخاص بالصفحه من خلال Request.QueryString حيث تمثل كمصفوفه بها كل المتغيرات الموجوده في الكويري سترينج , ويتم قراءة قيمة معينه بإحدى طريقتين :
1- بترتيب المتغير , حيث يوضع رقم ترتيب المتغير بين قوسي الكوليكشن [] , ولكن يجب ان يحدد ترتيب المتغيرات جيداً .
2- بإسم المتغير , حيث بدلاً من وضع رقم المتغير , يتم وضع اسم المتغير cid داخل القوسين [] , وهذه هي الطريقه الافضل والأسهل ,
حيث تمثل القيمة كنص يحمل قيمة المتغير التي بعد علامة "=" , ثم بعد ذلك يتم تحويل النص الى int وتمرير للداله FillCities لتقوم هذه الداله بجلب البيانات من قاعدة البيانات , وتعبئة الصفحة باسماء المدن .
وبنفس الطريقه يمكنك تمرير اكثر من متغير في الكويري الخاص بالصفحه , وقراءة قيمته من خلال اسم المتغير .
ختـــام
كانت هذه طريقة تمرير بيانات بين الصفحات باستخدام الكويري سترينج , وتم التطبيق على تمرير متغير واحد فقط للتبسيط , ولكن واقعياً فان معظم الصفحات تمرر لها العديد من القيم التي تحدد محتوى الصفحة .
تحميل المشروع
 Written by :  Mohammed Mahmoud
الفئة: ASP.Net | أضاف: ham_mody2000 (2011-10-18 4:10 AM)
مشاهده: 2677 | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 0
إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz