2012-02-07 12 views
6

क्या एएसपी.NET वेबसाइट के लिए डिफ़ॉल्ट थीम बनाना संभव है?डिफ़ॉल्ट एएसपी.नेट थीम्स

उदाहरण के लिए, अगर मैं एक विषय "Default" कहा जाता है, था और चयनित ive एक विषय "NewTheme" कहा जाता है और मैं एक फ़ाइल जो "NewTheme" में मौजूद नहीं है लेकिन जैसे "Default" विषय में मौजूद है संदर्भित:

<asp:image id="img" runat="server" ImageUrl="~/Images/image.jpg" /> 

तब "/App_Themes/Default/Images/image.jpg" से लिया जा सकता है यदि यह "/App_Themes/NewTheme/Images/image.jpg" पर मौजूद नहीं है?

इसके अलावा यदि कोई सीएसएस वर्ग "न्यूथीम" में मौजूद नहीं था, लेकिन यह "डिफ़ॉल्ट" में था, तो क्या यह "डिफ़ॉल्ट" हो सकता है? असल में, मुझे लगता है कि यह बेहतर होगा अगर यह पहली बार सभी डिफ़ॉल्ट शैलियों को ले लेता है, और उसके बाद किसी भी "न्यूथीम" को ओवरराइड करता है जो कि संघर्ष करता है।

मैं वैश्विक संदर्भ इस के समान काम करते हैं क्योंकि अगर Ive "es" स्थानीयकरण चयनित जानते हैं, और एक प्रमुख webreference.resx.es फ़ाइल में मौजूद नहीं है, लेकिन यह webreference.resx में, तो itll वहाँ से मान ले करता है।

मुझे लगता है कि यह एएसपी.नेट थीम्स के लिए महत्वपूर्ण कार्यक्षमता होगी क्योंकि मैं कुछ विषयों को बदलने के लिए अलग-अलग विषयों की कल्पना कर सकता हूं, और कुछ शैलियों में बदलाव आया है। मैं प्रत्येक छवि के लिए हर छवि और हर शैली हमेशा पूरी तरह से अलग होने की कल्पना नहीं कर सकता। और इसलिए इस कार्यक्षमता के बिना, यह शैलियों/छवियों को डुप्लिकेट करने का मामला होगा, जो कि मैं प्रशंसक नहीं हूं (स्पष्ट कारणों से!)।

+3

इस पर बक्षीस! मुझे app_themes कार्यक्षमता पसंद है लेकिन आधार विषय का उत्तराधिकारी नहीं होने में एक बड़ा दर्द है। – Malk

उत्तर

1

यह कार्यक्षमता एएसपी.NET में नहीं बनाई गई है। फिर भी, आप इसे काफी आसानी से कार्यान्वित कर सकते हैं:

  1. ग्लोबल.एक्सएक्स में या कस्टम HTTP मॉड्यूल में HttpApplication.BeginRequest ईवेंट को हुक करें।
  2. "/ App_Themes/NewTheme /" के अंतर्गत URL के साथ अनुरोधों की तलाश करें।
  3. जांचें कि HttpRequest.PhysicalPath पर फ़ाइल मौजूद है या नहीं।
  4. यदि फ़ाइल मौजूद नहीं है, तो HttpContext.RewritePath पर कॉल करें और "डिफ़ॉल्ट" के साथ अनुरोध URL में "NewTheme" को प्रतिस्थापित करें।
+0

कृपया मेरा संपादन देखें। क्या आपको लगता है कि इस तरह का एक फिक्स सीएसएस के लिए काम करेगा? – Curt

+0

सीएसएस के लिए, मैं अनुशंसा करता हूं कि आप "/App_Themes/NewTheme/stylesheet.css" के शीर्ष पर '@import url (" ../ default/stylheet.css ") डाल दें ताकि सभी सामान्य सीएसएस कैस्केडिंग नियम काम कर सकें हमेशा की तरह। –

+0

@Curt: क्या यह उत्तर काम नहीं करता है, क्या यह अस्पष्ट है, या आप विस्तृत कोड की तलाश में हैं? –

2

आपके द्वारा वर्णित डिफ़ॉल्ट थीम ASP.NET द्वारा समर्थित नहीं हैं। नियमित Themes और StyleSheetTheme एस हैं, लेकिन व्यक्तिगत नियंत्रण या स्थैतिक फ़ाइलों के मुकाबले उन्हें पृष्ठ अनुरोध स्तर पर गतिशील रूप से बदलना अधिक उपयोगी है।

यूआरएल रीराइटिंग या रूटिंग का उपयोग करके आप स्थैतिक फाइलों के लिए थीम के अपने संस्करण को कोड कर सकते हैं - लेकिन फिर यह वास्तव में थीम्स नहीं है।

<asp:Image> जैसे नियंत्रणों के लिए, आप उन्हें "ओवरराइड कर सकते हैं और ImageUrl जैसे गुणों को संशोधित कर सकते हैं, इस पर आधारित है कि" थीम "फ़ोल्डर्स के कुछ पदानुक्रम में कौन सी फाइल मौजूद हैं। फिर किसी भी मार्कअप परिवर्तन की आवश्यकता के बिना, उस नियंत्रण के सभी उदाहरणों को प्रतिस्थापित करने के लिए टैग मैपिंग का उपयोग करें।

FWIW, ग्लोबल.एक्सएक्स में BeginRequest ईवेंट केवल आईआईएस में गतिशील फ़ाइलों के लिए बुलाया जाता है (कैसिनी इसे स्थिरताओं के लिए भी कहते हैं)। आईआईएस में स्टेटिक्स का समर्थन करने के लिए, आपको HttpModule की आवश्यकता होगी, और आपको एकीकृत मोड में चलाने के लिए आईआईएस को कॉन्फ़िगर करने की भी आवश्यकता होगी।

संबंधित मुद्दे