2010-05-26 19 views
10

जब विषय वाला एक पृष्ठ प्रस्तुत किया जाता है, तो दिए गए विषय में स्टाइलशीट लिंक टैग बंद होने वाले सिर टैग से पहले प्रस्तुत किए जाते हैं। क्या किसी को इसे बदलने का तरीका पता है? क्या कोई तरीका है कि मैं उन टैग को ओपनिंग हेड टैग के ठीक बाद रख सकता हूं?एएसपी.नेट थीम स्टाइलशीट प्रतिपादन

मुझे पता है कि यह सभी लिंक टैग का चयन करके और इसे खोलने वाले हेड टैग के ठीक बाद रखकर jquery के साथ नीचे जा सकता है, लेकिन क्या सर्वर सर्वर पर इसे सेट करने का कोई तरीका है?

स्पष्टीकरण हमें बताएं कि मेरे पास मेरी थीम में एक सीएसएस फ़ाइल (थीम्ड.css) है। कि सीएसएस फ़ाइल में, मैं परीक्षण का एक आईडी के साथ एक div टैग के लिए एक ही शैली परिभाषा है:

#test {background-color:red; color:white;} 

आइए भी कहते हैं कि मैं एक दूसरे सीएसएस फ़ाइल (standard.css) कि मेरे विषय में नहीं है,

#test {background-color:yellow;} 

मैं अपने पृष्ठ विषय का उपयोग करने के लिए है, और मैं standard.css उपयोग करने के लिए एक हस्तलिखित लिंक टैग है: लेकिन यह परीक्षण का एक आईडी के साथ div टैग का एक और परिभाषा है। जब पृष्ठ निष्पादित किया जाता है, तो मानक.css के लिए लिंक टैग themed.css से पहले होता है। जब ऐसा होता है तो परीक्षण के आईडी के साथ मेरा div टैग लाल पृष्ठभूमि और सफेद अग्रदूत होता है। अगर मैं themed.css को लागू करना चाहता हूं और फिर आवश्यक गुणों को ओवरराइट करने के लिए standard.css (सफेद अग्रदूत के साथ पीले रंग की पृष्ठभूमि), तो मैं themed.css और फिर मानक.css चाहता हूं। मैं ऐसा नहीं कर सकता क्योंकि एएसपी.नेट थीम शीर्षक फ़ाइलों को बंद करने वाले सिर टैग से पहले रखता है।

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

धन्यवाद!

उत्तर

6

मैं परावर्तक में एक छोटे से जाँच किया था, और कुछ आपको दिलचस्प लग सकती पाया। फ्रेमवर्क PageTheme की विधि को कॉल करता है - हेडर में लिंक नियंत्रण इंजेक्ट करने के लिए ऑब्जेक्ट ऑब्जेक्ट।

int num = 0; 
foreach (string str in this.LinkedStyleSheets) 
{ 
    HtmlLink child = new HtmlLink { Href = str }; 
    child.Attributes["type"] = "text/css"; 
    child.Attributes["rel"] = "stylesheet"; 
    if (this._styleSheetTheme) 
     this.Page.Header.Controls.AddAt(num++, child); 
    else 
     this.Page.Header.Controls.Add(child); 
} 

अनुवाद: इस कोड स्निपेट प्रासंगिक तर्क पता चलता है? StyleSheetThemes इंजेक्षन में स्टाइल शीट शुरुआत हैडर टैग की और थीम अंत में स्टाइल शीट इंजेक्षन।

यह थीम और स्टाइलशीट विषयों के बीच इच्छित अंतर के अनुरूप है; यह है कि जब त्वचा और नियंत्रण सेटिंग्स के बीच कोई संघर्ष होता है तो थीम हमेशा जीत जाती है। निश्चित रूप से, !important विशेषता का उपयोग करते हुए एक गैर-थीमाधारित सीएसएस फ़ाइल में एक शैली अभी भी थीम शैली को ओवरराइड कर सकती है, लेकिन मुख्य टैग के भीतर सीएसएस फ़ाइलों की स्थिति रणनीतिक रूप से ओवरराइड-क्षमता स्टाइलशीट थीम की सुविधा प्रदान करती है।

ध्यान दें कि आपके पास दोनों एक स्टाइलशीट थीम और एक नियमित थीम हो सकती है। स्वाभाविक रूप से, स्टाइलशीट थीम चीजों को छोड़ दें जिन्हें आप ओवरराइड-सक्षम करने के लिए डिज़ाइन करते हैं, और थीम चीजों के लिए जिन्हें ओवरराइड नहीं किया जाना चाहिए।

एक अंतिम अवलोकन यह है कि विधि internal और गैर-वर्चुअल है, इसलिए इन दो विकल्पों के साथ हस्तक्षेप करने से कुछ कुंग-फु-एमएमए-पागल-प्रतिबिंब कौशल लगेगा, और शायद स्थिरता या रखरखाव के सर्वोत्तम हित में नहीं है ।

5

जैसे ही आपका head तत्व runat="server" है आप Page_PreRender में संग्रह पुनर्व्यवस्थित कर सकते हैं:

protected void Page_PreRender(object sender, EventArgs e) 
    { 
     ControlCollection container = this.Page.Header.Controls; 
     foreach (var control in container.OfType<System.Web.UI.HtmlControls.HtmlLink>().ToArray()) 
     { 
      container.Remove(control); 
      container.AddAt(0, control); 
     } 
    } 
+0

लेकिन यह धारणा के साथ है कि आपके सिर में लिंक टैग की एक स्थिर संख्या है। मैं अधिक उत्सुक था अगर लिंक टैग रखने के प्रवाह को ओवरराइड करने का कोई तरीका था, वहां पहली जगह है, और मामले के बाद उन्हें पुन: व्यवस्थित नहीं किया गया। –

+0

इस समय प्रीरेंडर() घटना होती है, वर्तमान थीम फ़ोल्डर में पाए गए सभी सीएसएस-फाइलों के लिंक पहले से ही हेडर में हैं। नियंत्रण संग्रह। तो मेरा कोड स्थैतिक और गतिशील (एएसपी.नेट द्वारा जोड़ा गया) दोनों लिंक पुनर्व्यवस्थित करेगा। – UserControl

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