اخواني كيف ان احدد ظهور web user control بالصفحه الرئيسية من خلال لوحة التحكم
Web User Control
السلام عليكم
سهل جداً،،
على أساس انك لم تحدد كم Web User Control في الصفحة، فسوف نفترض أنه في مكان واحد فقط و لنفترض أيضاً ان لديك مجموعة من هذه Web User Control و يوجد لديك في لوحة التحكم خيار يمكنك من إعتماد X على اساس انه Web User Control الذي سوف يعرض في الصفحة. و لنفترض انك قمت بحفظ إسم Web User Control في Web.config كأحد الخيارات.
<appSettings> <add key="MyControl" value="mytestwebcontrol.ascx"/> </appSettings>
الآن في المكان من الصفحة التي تريد أن يظهر Web User Control ضع
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
و في حدث التحميل قم بكتابة التالي
Control hdrCtl = null;
try
{
// Load the specified page.
hdrCtl = LoadControl(System.Configuration.ConfigurationManager.AppSettings.Get("MyControl"));
// Add the Control to the page.
PlaceHolder1.Controls.Add(hdrCtl);
}
catch (Exception ex)
{
Debug.WriteException(ex);
// In case the link is broken then forword to the Defualt page.
// this also will avoid the exception of dynamically loading controls
// from different trees.
Response.Redirect("~/Default.mitc");
}شكرا يا خوي على هذه الاجابات لاني كنت مره ادور عليها
بسم الله الرحمن الحيم
جزاك الله خيرا أستاذ nawaf227 الكود اشتغل معايا بعد مااجريت عليه تعديل بسيط
والسلام عليكم
MCSD
#C
السلام عليكم
الفكرة بسيطة و هي أن تقوم بعملية تحميل Web User Controls في وقت التشغيل بدلاً من إضافتها في الصفحة في وقت التصميم.
أنا لا أكتب بلغة VB لكن استخدمت هذا الموقع
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
لتحول الكود
Dim hdrCtl As Control = Nothing
Try
' Load the specified page.
hdrCtl = LoadControl(System.Configuration.ConfigurationManager.AppSettings.[Get]("MyControl"))
' Add the Control to the page.
PlaceHolder1.Controls.Add(hdrCtl)
Catch ex As Exception
' In case the link is broken then forword to the Defualt page.
' this also will avoid the exception of dynamically loading controls
' from different trees.
Response.Redirect("~/Default.mitc")
End Tryهنالك نص كان زائد وهو
Debug.WriteException(ex);
وهو عبارة عن Logger خاص بي وليس بجزء من .NETFramework
السلام عليكم
هل وضعت الإعدادات في ملف Web.Config؟
<appSettings>
<add key="MyControl" value="("~/admin/control/department.ascx"/>
</appSettings>
وبعدين أعمل الشكل التالي (أنا ماني متأكد من شكل VB تعرف ما أعرف Syntax :) ) المهم استخدم الأسم الذي وضعناه MyControl
Dim hdlc As Control = LoadControl(System.Configuration.ConfigurationManager.AppSettings.Get("MyControl"))
View5.Controls.Add(hdlc)أو انك مباشرة تكتب عنوان Web User Control
Dim hdlc As Control = LoadControl("~/admin/control/department.ascx")
View5.Controls.Add(hdlc)بالنسبة Logger أنسى أمره كان سطر زائد أنا استخدمه لكتابة أي خطأ يحدث في ملف خاص استطيع بعد ذلك الإطلاع عليه، لكن ما له علاقة بالسؤال تبعك
اتمنى ان يفيدك و خبرني إذا ما نفع معك
تم تعديل هذه المشاركة بواسطة nawaf227 في 1 أكتوبر 2007 في 13:29
لا ما تحتاج
أنا وضعته على اساس انك تقول تبي تعمله عن طريق لوحة التحكم، على العموم تستطيع عمله بأي طريقة تريد.
السلام عليكم
أمهلني بعض الوقت وسأعمل لك مثال و سأرفعة لك،،
اليوم أو بكره على الكثير أو راسلني أن حبيت (لكن ما استطيع عمله بلغةVB ) لأني لم إنزله على جهازي
السلام عليكم
أنا عطيتك الطريقة فقط، أنت لازم تكمل الباقي
ما أتوقع أنه صعب أنك تضع لوحة تحكم و فيها شاشة تعرض جميع Web Controls لديك و من ثم تختار أن تظهر في شاشة معينة.
أين تحفظ قائمة Web Controls؟
الخيار يرجع لك : قاعدة بيانات، ملف XML أو أي طريقه أخرى تراها.
كل ما تحتاجه القليل من العمل و لا أرى هنالك أي صعوبه في تحقيق ذلك.
إذا كان هنالك مشكله معينة لم تستطع عملها فأخبرني لكن يجب أن تضع لمساتك على العمل الذي تقوم به وليس القبول فقط بما يعمله الآخرين وهذا ما يجعلك مختلف عن الآخرين، إن فهمت ما أقصد :)
تمناتي لك بالتوفيق
لقد قمت بصنع كل شيء ولكني وقفت حائراً عند نقطه معينه وهي كيفية أظهاره لو شاهدت الرابط اللي كتبته في أول الصفحه تحت عضوية الثلج سوف تفهم المقصود
سوف أحاول أن افصل المشروع وارفع لك الجزء اللذي توقفت عنده لكي تشاهد المشكله اللذي واجهتني أو اكتبها لك مفصله عما قريب
شااكر لك مساعدتك واتمنى ان تنتظر مني خلال يومين ان شاء الله
أخي العزيز نواف بشرحلك مره ثانية فكرة المشروع
يحتوي على masterpage اللتي يتم وضع الكونترول بها مثل تسجيل الدخول أو أحصائيات الموقع أو أقسامه وانا قمت ببنائها كامله
وصفحة admin.aspx
صفحة الادمن هي اللي تتحكم بظهور الكنترول عن طريق التحكم بحالة الكنترول المضاف في قاعدة البيانات من تحويل الـ state إلى 1 أو 0
صفحة الماستر تقوم بقرائة الداتا بيس بشرط الحاله أن كان 1 فسوف تقوم بإضافته في الـ viewstate
تبقى خطوه واحده وهي كيفية اظهار الكنترول اللتي حالتها 1 والمخزن رابطها أو تعريفها في الـ viewstate جربت أكثر من طريقة لكن مامن حل
<% If ViewState("number") <> 0 Then
Dim i As Integer = 0
For i = 0 To ViewState("number")
Response.Write(ViewState("menu" & i)
Next
End If%>والكود المضاف في الـ
viewstate("menu0")
هو
<uc2:rightc ID="Rightc1" runat="server" />
والتجسيل موجود في اعلى الصفحه مضاف يدوياً
<%@ Register Src="control/rightc.ascx" TagName="rightc" TagPrefix="uc2" %>
لكن الصفحه لاتظهر حاولت وضعها في label لكن نفس المشكله لاتظهر عندما جربت اضافة في قاعدة البيانات
leftc.ascx ظهرت لكن كود ظهور الكنترول يضاف في سورس الصفحه ولكن لايظهر الكنترول
<br /> <uc2:rightc ID="Rightc1" runat="server" /><br/>leftc.ascx<br/
هذا سورس الصفحه
أخي الكريم
واحد منا ما هو فاهم الآخر، ما أراه الآن هو نفس الذي عملته لك.
أنا شاهدت الرابط الذي أعطيتني وبصراحه ما ني مقتنع لمذا تحفظ في ViewState. هنالك حالات يكون الحفظ في ViewState وخصوصا عندما تريد أن تحفظ الحالة مثال لو كنت تبي تعمل شيء مشابه DataGrid
صحيح عندما تضيف UserControl في Runtime يجب أن تكون حذرا حتى لا تقع مع مشاكل في ViewState وهنالك مقاله جيده تشرح أكثر عن هذا الموضوع
http://msdn2.microsoft.com/en-us/library/ms972976.aspx
أعتذر أنت الآن تجرب الكود الذي رأيته في تلك المشاركة و ليس الذي أقترحته عليك، فبتالي ليس في مقدوري أن أخدمك. أيضا ألاحظ انك عملت Response,write أخي هذا كنترول وليس جزء HTML أو JavaScript. يجب أن تعمل له تحميل Load الذي عملته انت كأنك كتب <uc2:rightc ID="Rightc1" runat="server" /> على شكل HTML. أين ViewSate و أين Initialization. أخي UserControl هو في النهاية كود وليس فقط HTML فيحتاج أن يحمل في الذكرة للتنفيذ.
أنا قلت لك أنت أحفظ الرابط إلى UserControl مثلاً "~/Controls/WebUserControl1.ascx" في كائن Page مثلا أو حتى XML أو في قاعدة البيانات ثم قم بإضافته بالطريقة التي أخبرتك.
انا أنصحك بالقراءه عن UserControl وأيضاً ViewSate و أيضا Web Page life cycle
تم تعديل هذه المشاركة بواسطة nawaf227 في 7 أكتوبر 2007 في 00:18
أنا ما أشوف فيه فرق
شوف لنفترض أن لديك جدول بإسم T_UserControls فيه الحقول التاليه:
1- رقم ID
2- المسار إلى الكنتورل مثال "Controls/mycontrols.ascx/~"
3- أي معلومات أخرى قد تحتاجها
ولديك الجدول T_Page وفيه الحقول التاليه:
1- رقم ID
2- اسم الصفحه
و لديك جدول أخر اسمه T_UserControlPageMap وفيه الحقول التاليه:
-1 رقم ID تبع الجدول T_UserControls
2- رقم ID تبع الجدول T_Page
هذا الجدول هو اللي راح تتحكم فيه في لوحة التحكم. بحيث تضيف (تربط) الكنتورل بالصفحه
الآن نأتي إلى الصفحة:
في الغالب أن للصفحة Layout بحيث أن الكنتورل راح يتوزعون فيها. خلنا نفترض أن عندك Layout فيه ثلاث أعمده.
الآن كل اللي عليك تعمله في الصفحه أن تعمل Query و تجيب كل الكنترولز الي تبع الصفحة و تعرضهم بنفس الكود الذي ارسلته لك. طبعاً بتقول كيف اتحكم من يجي قبل الآخر ؟
ممكن تضيف في T_UserControlPageMap خانه تحدد في أي مكان في الصفحة تبيها.
طبعا الدعوى ما هي قص ونسخ للكود الذي ذكرته لك، تحتاج أنك تتحكم في PlaceHolders و ممكن أيضاً ما تستخدم PlaceHolder و تستخدم شيء أخر. أيضاُ تقدر تضيف أكثر من كنتورل في PlaceHoder و احد وراح يكونو فوق بعض في الغالب.
ياعزيزي ما ني شايف اي صعوبه، أن أحتجت حاجة تستطيع مراسلتي عبر البريد أو من خلال موقعي. بس تكفى لا تقول هذا ما نفع معك!!!
أمزح معاك:)
هذا الموضوع مغلق.

