الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Web User Control

مغلق
بدأه Eng.Fedail في 28 سبتمبر 2007 · 24 رد · 2,236 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني كيف ان احدد ظهور web user control بالصفحه الرئيسية من خلال لوحة التحكم

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#2

السلام عليكم

سهل جداً،،

على أساس انك لم تحدد كم 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");
		}
#3

شكرا يا خوي على هذه الاجابات لاني كنت مره ادور عليها

#4

بسم الله الرحمن الحيم

جزاك الله خيرا أستاذ nawaf227 الكود اشتغل معايا بعد مااجريت عليه تعديل بسيط

والسلام عليكم

MCSD

#C

#5

الله لايهينك لو يكون كود فيجوال لاني مافهمت الكود

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#6

السلام عليكم

الفكرة بسيطة و هي أن تقوم بعملية تحميل 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

#7

سلمت ياغلاي بجربه واردلك ان شاء الله

بس مافهمت ايش قصدك بالوجر

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#8

الله لايهينك أخوي طبقت هالكود لكن مانفع

 Dim hdlc As Control = LoadControl(System.Configuration.ConfigurationManager.AppSettings.Get("~/admin/control/department.ascx"))
		View5.Controls.Add(hdlc)

تطلعلي هالرساله عند التنفيذ

Value cannot be null.

Parameter name: virtualPath

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#9

السلام عليكم

هل وضعت الإعدادات في ملف 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

#10

أخوي هل يجب كتابته في ملف الكونفغ دام انا مطبق هذا الامر

Dim hdlc As Control = LoadControl("~/admin/control/department.ascx")
		View5.Controls.Add(hdlc)

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#11

لا ما تحتاج

أنا وضعته على اساس انك تقول تبي تعمله عن طريق لوحة التحكم، على العموم تستطيع عمله بأي طريقة تريد.

#12

لم ينجح أخي العزيز ولا بطريقة

فكرت اني اضعهم بداتا بيس وطبقت طريقة ثانيه لكم لم تنجح أيضاً

http://www.swalif.net/softs/swalif46/softs188255/

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#13

السلام عليكم

أمهلني بعض الوقت وسأعمل لك مثال و سأرفعة لك،،

اليوم أو بكره على الكثير أو راسلني أن حبيت (لكن ما استطيع عمله بلغةVB ) لأني لم إنزله على جهازي

#14

يعطيك الف عافيه أهم شي الفكرة وأنا اطبقها على الـ vb أتمنى أنك تكون زرت الموضوع بالرابط اللي فوق

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#15

السلام عليكم

تفضل أخي

LoadWebUserControl.rar

#16

جزاك الله كل خير بشوفه واردلك

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#17

أشكرك كل الشكر أخي ولكن ليس هذا المطلوب

أريد التحكم بأظهار الكنترول أن يكون بصفحة مختلفه مثل admin.aspx وليس علي أن أختار أظهار كنترول واحد فقط بل استطيع اظهارهم كلهم أو أخفاء البعض

كما هو الحال مع نظام المجلات

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#18

السلام عليكم

أنا عطيتك الطريقة فقط، أنت لازم تكمل الباقي

ما أتوقع أنه صعب أنك تضع لوحة تحكم و فيها شاشة تعرض جميع Web Controls لديك و من ثم تختار أن تظهر في شاشة معينة.

أين تحفظ قائمة Web Controls؟

الخيار يرجع لك : قاعدة بيانات، ملف XML أو أي طريقه أخرى تراها.

كل ما تحتاجه القليل من العمل و لا أرى هنالك أي صعوبه في تحقيق ذلك.

إذا كان هنالك مشكله معينة لم تستطع عملها فأخبرني لكن يجب أن تضع لمساتك على العمل الذي تقوم به وليس القبول فقط بما يعمله الآخرين وهذا ما يجعلك مختلف عن الآخرين، إن فهمت ما أقصد :)

تمناتي لك بالتوفيق

#19

لقد قمت بصنع كل شيء ولكني وقفت حائراً عند نقطه معينه وهي كيفية أظهاره لو شاهدت الرابط اللي كتبته في أول الصفحه تحت عضوية الثلج سوف تفهم المقصود

سوف أحاول أن افصل المشروع وارفع لك الجزء اللذي توقفت عنده لكي تشاهد المشكله اللذي واجهتني أو اكتبها لك مفصله عما قريب

شااكر لك مساعدتك واتمنى ان تنتظر مني خلال يومين ان شاء الله

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#20

أخي العزيز نواف بشرحلك مره ثانية فكرة المشروع

يحتوي على 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/

هذا سورس الصفحه

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#21

أخي الكريم

واحد منا ما هو فاهم الآخر، ما أراه الآن هو نفس الذي عملته لك.

أنا شاهدت الرابط الذي أعطيتني وبصراحه ما ني مقتنع لمذا تحفظ في 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

#22

أخي العزيز الحل اللي اعطتيني يكون التحكم فيها من خلال نفس الصفحة أما اللي اقوم فيه انا يكون من خلال صفحة تحكم

لنفرض اني لن اضيفه الى viewstate فكيف اقوم باضافته بعد سحبه وتحديده من الداتا بيس

سوف ارقوم بقراءة مفصلة أكثر عن ما أخبرتني بهم

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#23

أنا ما أشوف فيه فرق

شوف لنفترض أن لديك جدول بإسم 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 و احد وراح يكونو فوق بعض في الغالب.

ياعزيزي ما ني شايف اي صعوبه، أن أحتجت حاجة تستطيع مراسلتي عبر البريد أو من خلال موقعي. بس تكفى لا تقول هذا ما نفع معك!!!

أمزح معاك:)

#24

فكرتك لمعة براسي بس المشكلة تطبيقها بالـ Vb مانفع على العموم عطني لبكرا ان شاء الله بنفذها واخبرك

ربي يوفقك دنيا وآخره ماقصرت معي

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#25

ربي يوفقك دنيا وآخرة تم نجاح التطبيق بصورة رائعه

الله يسعدك يابعدي

joseph.gif

logo.gif

CCNA 640-802

مدونتي

هذا الموضوع مغلق.

مواضيع مشابهة