سؤال

مشروعي له موضوعات متعددة بألوان مختلفة.
أحتاج إلى جلد مربعات نصية معينة بخط/حجم/إلخ. [لا يوجد فرق في اللون
حاليا ، أضيف <asp:TextBox SkinID="skinned" runat="server".../> إلى جميع ملفات .skin تحت كل موضوع. هل هناك طريقة لوضع جلد النص في مكان واحد ، مثل الجلد الرئيسي؟

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

عدم وجود ميراث أو متتالي في سمات ASP.NET التنفيذ هو قيود مؤسف لا يحظى بالكثير من الاهتمام. في السيناريوهات التي ترغب في الحصول عليها بشرة عالمية الكل موضوعات (دون تغيير تعريف التحكم نفسه) ، لديك خياران:

الخيار رقم 1: استخدم VirtualPathProvider

(الجانب السلبي من هذا هو أنه لا يمكنك استخدامه على مواقع الويب المسبقة دون انعكاس الحل البديل.)

يمكنك تحديد أ Global.Skin ملف تحت خاص عالمي موضوع حيث يتم الاحتفاظ بالجلود المشتركة ؛ ستقوم أيضًا بإنشاء ملف Global.skin من العنصر النائب ضمن جميع الموضوعات الأخرى أيضًا:

App_Themes
- Global
  \Global.skin (primary)
- ThemeA 
  \Global.skin (empty placeholder)
- ThemeB
  \Global.skin (empty placeholder)

في ال VirtualPathProvider يمكنك بعد ذلك إعادة توجيه جميع الطلبات app_themes * global.skin ل app_themes global global.skin.

الخيار رقم 2: استخدم مهمة ما بعد البناء

هذا تعديل على الحل أعلاه الذي يتجنب قيود مواقع الويب المسبقة ؛ بدلاً من القيام بإعادة التشغيل في وقت التشغيل ، يمكنك تطبيقه بعد البناء عبر مهمة MS-Build التي تنتشر ببساطة العالمي global.skin إلى جميع مجلدات الموضوع الأخرى.

لقد استخدمت كلا الخيارين بنجاح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top