[ASP.NET] التعامل مع الـ Web User Control
مدرج تحت قسم: دروس
في المشاريع الكبيرة والتي تحتوي على صفحات كثيرة ومتعددة فغالباً يكون تقسيم الصفحات بنفس الشكل والنظام مثلاً نتحدث عن مجلة أو برنامج إدارة محتوى مثل مجلة النيوك.
نلاحظ ان الصفحة تنقسم لخمسة أقسام
- منطقة الهيدر (الترويسة العلوية)
- منطقة الفوتر (الترويسة السفلية)
- منطقة القوائم اليمين
- منطقة القوائم اليسار
- محتوى الصفحه في المنتصف بين الأقسام الأربعة أعلاه
كل الصفحات تتكون من خمس أقسام تتشابه فيها أربعة أقسام وهي:
- منطقة الهيدر (الترويسة العلوية)
- منطقة الفوتر (الترويسة السفليه)
- منطقة القوائم اليمين
- منطقة القوائم اليسار
هذه الأقسام الأربعة تكون نفسها في كل الصفحات بدون أي اختلاف، بينما تعرض أدوات ومحتوى الصفحة في المنطقة الخامسة وتتغير على حسب الصفحة نفسها، بما أن لدينا أربعة أقسام متشابهة ولنفرض أن لدينا في المشروع مئة صفحة، وأردت أن تقوم بالتغيير على أحد هذه المناطق، مثلاً القوائم أو الهيدر أو الفوتر، فأنت هنا مجبر على التعديل في المئة صفحة كلها، وهذا أمر غير منطقي بينما لدينا طريقة اسهل وعملية أكثر.
الطريقة هي باستخدام صفحات الـ Web User Control. سيكون لدينا أربع صفحات نستدعيهم في كل صفحات الموقع، الأولى للهيدر والثانية للفوتر والثالثة للقائمة اليمنى، والرابعه للقائمة اليسرى.
فإذا أردنا أن نعدل على الهيدر نقوم بالتعديل على صفحة الهيدر فقط وبالتالي تتعدل في كل الصفحات الأخرى.
نفرض أن لدينا صفحة في الموقع هي index.aspx تتكون من الخمسة أجزاء التي تم ذكرها أعلاه.
طريقة العمل
نقوم بإضافة أربع صفحات Web User Control ونسميها هكذا مثلاً:
- header.ascx الترويسة العلوية
- footer.ascx الترويسة السفلية
- rightmenu.ascx القوائم على اليمين
- leftmenu.ascx القوائم على اليسار
نستدعي هذه الأربع صفحات في صفحة الإندكس index.aspx، في السورس كود لصفحة الإندكس ومباشرة تحت أول سطر.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" StylesheetTheme="Andalus" Theme="Andalus" %>
نقوم باستدعاء الأربع صفحات Web User Control وكود الاستدعاء.
<%@ Register TagPrefix="NewsTemp" TagName="header" Src="controlpages/header.ascx" %> <%@ Register TagPrefix="NewsTemp" TagName="footer" Src="controlpages/footer.ascx" %> <%@ Register TagPrefix="NewsTemp" TagName="rightmenu" Src="controlpages/rightmenu.ascx" %> <%@ Register TagPrefix="NewsTemp" TagName="leftmenu" Src="controlpages/leftmenu.ascx" %>
لاحظ أنني وضعت الأربع صفحات في داخل مجلد خاص بها وهو ControlPages، كما أن كل صفحة لها اسم خاص بها سنسخدمه في استدعاء الصفحة فيما بعد في المكان الذي نريد عرضها به واسمها هو TagName.
- صفحة الهيدر اسمها header
- وصفحة الفوتر اسمها footer
- وصفحة القوائم اليمين اسمها rightmenu
- وصفحة القوائم اليسار اسمها leftmenu
هذه الأسماء مسنده لل TagName في الكود ويمكن أن نعتبرها مثل الأسماء البرمجية التي نستدعي بها الأدوات.
الآن في داخل الفورم لصفحة الإندكس Form نقوم باستدعاء هذه الصفحة بالطريقة التي نرغب بها، مثلاً صفحة الهيدر تكون في رأس الصفحة ومباشرة تحته فتحة الـ Form نستدعيها بهذا الكود:
<NewsTemp:header runat="server" ID="HeaderTemp" />
وصفحة الفوتر تكون في آخر الصفحة نستدعيها قبل اغلاق ال Form بهذا الكود:
<NewsTemp:footer runat="server" ID="FooterTemp" />
الآن بين منطقة الهيدر والفوتر نريد عمل منطقة للقوائم اليمنى ومنطقة للقوائم اليسرى، وفي المنتصف محتوى الصفحة. ببساطة ننشئ جدولاً يتكون من صف واحد وثلاثة أعمدة، قم بتقسيمها، مثلاً العامود الأول من اليمين عرضه 25% من الصفحة والعامود الثاني وهو عامود المنتصف عرضه 50% من الصفحة، والعامود الثالث وهو عامود القوائم اليسرى عرضه 25% من الصفحة.
هذا هو الجدول:
<table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td align="center" style="width: 20%; height: 16px;" valign="top"> هنا منطقة القوائم اليمين </td> <td align="center" style="width: 60%; height: 16px;" valign="top"> هنا محتوى الصفحة </td> <td align="center" style="width: 20%; height: 16px;" valign="top"> هنا منطقة القوائم اليسار </td> </tr> </table>
الآن في مكان جملة منطقة القوائم اليمنى نستعدي صفحة الكنترول للقوائم اليمنى بهذا الكود:
<NewsTemp:rightmenu runat="server" ID="RightMenuTemp" />
ومكان جملة منطقة القوائم اليسرى نستدعي صفحة القوائم اليسرى بهذا الكود:
<NewsTemp:leftmenu runat="server" ID="LeftMenuTemp" />
ومكان جملة محتوى الصفحة نعرض محتوى الصفحة فيه.
الآن، انتهينا من عمل الصفحة ونفس هذا التصميم يكون لكل صفحات الموقع وهكذا أنت تضمن أنك لو أردت فيما بعد أن تقوم بالتعديل على الهيدر مثلاً، فتقوم بتعديل صفحة header.ascx فقط.
نتطرق قليلاً لصفحات الـ Web User Control
هذه الصفحات لا تختلف عن صفحات ال aspx كثيراً فهي لها سورس كود ولها ايضاً صفحة الكود البرمجي الخاص بها ويمكن وضع أي نوع من الأدوات تريده وتستخدمه وايضاً كتابة أي كود تريده في صفحة الكود مثل صفحات الـ aspx تماماً.
فمثلاً يمكنك أن تصنع نظام بلوكات أو قوائم يتم إضافة القوائم من لوحة التحكم مثل مجلة النيوك وفي اليمين أو اليسار ومن خلال صفحة الكنترول للقوائم اليمين أو اليسار تستدعي هذه القوائم وتفرغها في الصفحة فيكون لديك نظااام قوائم كما هو في برامج إدارة المحتوى والمجلات العالمية مثل مجلة النيوك في الـ php أو أي مجلة أخرى حتى مجلات الـ asp.
أسأل الله تعالى أن أكون وفقت في الشرح، وأي استفسار أنا موجود.
في أمان الله وحفظه ولاتنسونا من دعائكم ابداً.


هذه الطريقة هل هي مرتبطة فقط مع ASP.Net? أم يمكن عملها مع ASP مثلا أو مع PHP?
أقصد هل ما كتبته هي فقط طريقة عمل هذا الأمر بلغة ASP.Net ؟
ألف شكر على المقاله الرائعة
هناك أداة رائعة في الفيجوال ستيديو 2005 اسمها Master Page وهي صفحة تقوم بتصميم كل ما تريد من الترويسات العلوية والسفلى والقوائم الجانبية وبعد ذالك تقوم بإضافة ContentPlaceHolder وهذه الأداة تمثل مكان المحتوى في جميع الصفحات والبقية تكون كقالب للمحتوى …
وهنا شرح فيديو يوضح الطريقه :
http://asp.net/learn/videos/view.aspx?tabid=63&id=48
رائعه جداً وسهله جداً ….
ولمزيد من المعلومات عن تقنية ASP .NET أحببت أن أطرح مدونتي للإفاده
http://www.althari.com/blog
وشكراً لكم
السلام عليكم ورحمة الله وبركاته …
مقال مميز و ممتاز …
نشكرك على كتابته …
استفدت منه كثيراً …
ولي ملاحظة بسسيطة اتمنى ان تتقبلها من اخيك …
2- منطقة الفوتر (الترويسة السفلية) <<<الاجمل ان تقال عنها (التذيل السفلي )
وشكراً ,,
اخى الكريم شكرا … ولكن ما هو الحال مع html
وهل الفيجوال ستيديو 005 >>>>> html ?>?>?>?
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اشكرك اخوي على المقال الرائع جدا
جزاك الله خير
الصراحه مقال ممتع جدا و مفيد ….. و أفادني كثيرا
اخوي بنسبه للمقال هل نستطيع تطبيقها في المدونات الشخصية من نوع html أما انها تقتصر على المجلات المواقع العامه هذي من جهه
الجهة الاخرى التي أريد ان استفسر عنها
هي طريقة ايضا قائمة ثانية على اليمين تحت القائمة الاولى التي قمنا بعملها في المره الاول ….
اعتقد لغة الكتابة تختلف تمام عن لغة التصميم الخارجية فقط
لانها تعتمد على أكواد و ليس التعامل مع ادوات مثل الفرونت بيج
كما ذكرتم
عند وضع ال TEXT BOX ORLABALE OR WIZARD
فى ال WEB USER CONTROL OR MASTER PAGE
لازم يكون RUNAT SERVER
والفورم RUNAT SERVERلازم يكون واحد فى الصفحه
فما الحل؟؟؟؟؟؟؟؟!!!!!!!!!!
جزاك الله خير على هذا الدرس الواضح
لكن مثلما قال اخي عبد الملك
أليس صفحة Master Page سواء كانت في فيجوال ستديو 2005 أو 2008
ستكون كفيلة بعمل ذلك ؟
أم هذه الطريقة تحوي تميزاً من نوع آخر ..لكني لا أفقهه ؟
اسال الله جل وعلا ان يجزيك عنا كل خير..وان يبارك في سعيك.
انا هاوي للبرمجة لم ادرسها بل تعلمتها من المنتديات والمواقع الاجنبية واني فرح جدا اني استطعت ان اكتب شكري واسال سؤالي وهو:
1-في صفحات ascx هل يجب وضع الادوات المربوطة بقاعدة البيانات ضمن جدول منسق ام لا؟
2- سؤال آخر : في البودي وهو المنتصف اذا احببت ان اضيف سطر كالعنوان والناشر ثم اسفل منه اريد ربطه باداوت ascx وهي مربوطة بالقاعدة .انا انوي تصميم منتدى بسيط جدا وقد بدات فيه وحين العمل والاختبار على الاستوديو انبهر بالنتائج الرائعة
مثل
http://img94.imageshack.us/img94/5310/test1pp.jpg
لكن اتفاجا بان تنسيق الصفحة والجداول يتبعثر بعد تجربتها على خادم iis7
انظر
http://img808.imageshack.us/img808/6426/test2xw.jpg
وهي نفس الصفحة فكيف اضبط الصفحات
وقد سالت باحدى المنتديات :::
_____________________________________
طريقة استخدامي او ترتيبي لتنظيم الجداول اني وضعت اداة .ascx
كهيدر واخرى كفوتر
ثم اربطها بكل الصفحات
الاخرى
اني بالصفحة الرئيسية بعد ربط التحكم اضيف جدول صف وعمود واحد ثم داخله اضيف جدول صف وعمود واحد للوقو ثم اسفل جدول اللوقو اضيف جدول صف وعمود وفيه اداة بانل ليحتضن تحكم ascx
اما دخول او خروج حسب حالة الجلسة
ثم اسفله اضيف جدول اخر بصف وعمود وبه اداة بانل لتحتضن تحكم ascx المربوط باسماء المنتديات من القاعدة
وضمن عنصر التحكم المربوط باسماء المنتديات جدول اخر…………..هل هذا هو الاشكال؟
لانها جداول متداخلة
http://img6.imageshack.us/img6/8296/hrader.jpg
http://img641.imageshack.us/img641/5056/footergb.jpg
http://img146.imageshack.us/img146/4306/defaultzn.jpg
http://img708.imageshack.us/img708/4471/showthread.jpg
http://img204.imageshack.us/img204/9524/replyi.jpg
__________________
المعذرة استاذي سؤال ثاني
وهو كيف اربط محتويات الصفحة بالقاعدة والجداول