2010-05-31 15 views
23

में जोड़ना है, मैं स्टाइलशीट्स को मुख्य अनुभाग में प्रोग्रामेटिक रूप से जोड़ना चाहता हूं, लेकिन मैंने देखा कि उदाहरणों में से एक को केवल एक स्टाइल शीट जोड़ने के लिए कोड की कई पंक्तियों की आवश्यकता होती है, भले ही मुझे बहुत कुछ चाहिए:स्टाइलशीट्स को प्रोग्रामिंग रूप से Asp.Net

उदाहरण कोड:

HtmlLink css = new HtmlLink(); 
css.Href = "css/fancyforms.css"; 
css.Attributes["rel"] = "stylesheet"; 
css.Attributes["type"] = "text/css"; 
css.Attributes["media"] = "all"; 
Page.Header.Controls.Add(css); 

मैं भी Page.Header.RenderControl() विधि का उपयोग करें, लेकिन यह या तो काम नहीं किया। ऑब्जेक्ट नल कुछ त्रुटि फेंक दी गई थी।

मैंने Page.Header.InnerHtml और InnerText += "<link .... "/> चीजों का भी उपयोग किया लेकिन उन्होंने शाब्दिक त्रुटि को फेंक दिया जो मुझे सामान्य त्रुटि लगता है।

मैं इस कोड का इस्तेमाल किया:

List<Literal> cssFiles = new List<Literal>(); 
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") + @""" type=""text/css"" rel=""stylesheet"" />" }); 
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainLayout.css") + @""" type=""text/css"" rel=""stylesheet"" />" }); 
AddStyleRange(cssFiles); 

private void AddStyleRange(List<Literal> cssFiles) 
{ 
    foreach (Literal item in cssFiles) 
    { 
    this.Header.Controls.Add(item); 
    } 
} 

यह पहली बार काम किया लेकिन जब मैं पृष्ठ बदलने पर यह काम करना बंद कर।

मैं मास्टर पृष्ठ का उपयोग कर रहा हूँ और मैं Master.cs फ़ाइल पर इन कोड लिख रहा हूँ और यह भी कुछ लोगों को Page.Header के बजाय this.Header उपयोग करने के लिए सिफारिश की लेकिन जब मैं बनाया यह एक त्रुटि है जो कहता है मुझे लगता है कि इस तरह की घोषणा नहीं कर सकते हैं फेंकता है।

कई शैलियों को जोड़ना मुश्किल नहीं होना चाहिए।

यह जटिल हो रहा है।

उत्तर

42

ठीक है, समाधान मैं वर्तमान में उपयोग कर रहा हूँ है:

मैं एक सहायक श्रेणी का निर्माण:

using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace BusinessLogic.Helper 
{ 
    public class CssAdder 
    { 
     public static void AddCss(string path, Page page) 
     { 
      Literal cssFile = new Literal() { Text = @"<link href=""" + page.ResolveUrl(path) + @""" type=""text/css"" rel=""stylesheet"" />" }; 
      page.Header.Controls.Add(cssFile); 
     } 
    } 
} 

और फिर इस सहायक वर्ग के माध्यम से, सभी मुझे क्या करना है:

CssAdder.AddCss("~/Resources/Styles/MainMaster/MainDesign.css", this.Page); 
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainLayout.css", this.Page); 
CssAdder.AddCss("~/Resources/Styles/Controls/RightMainMenu.css", this.Page); 
//... 

तो मैं जितना चाहूं उतना जोड़ सकता हूं जितना मैं सरल कोड की एक पंक्ति के साथ चाहता हूं।

यह मास्टरपेज और सामग्री पृष्ठ संबंधों के साथ भी काम करता है।

उम्मीद है कि यह मदद करता है।

पीएस: मुझे इस और अन्य समाधानों के बीच प्रदर्शन अंतर नहीं पता है, लेकिन यह अधिक सुरुचिपूर्ण और उपभोग करने में आसान लगता है। यदि आप बेहतर तरीके जानते हैं, तो कृपया मुझे बताएं। धन्यवाद ...

+0

मुझे मिला एक गचाचा: सुनिश्चित करें कि आपके टैग में runat = "server" है या कोड इसे नहीं मिलेगा। – SteveCav

4

मैं बात जो मेरे लिए काम किया चस्पा करेंगे:

HtmlLink link = new HtmlLink(); 
//Add appropriate attributes 
link.Attributes.Add("rel", "stylesheet"); 
link.Attributes.Add("type", "text/css"); 
link.Href = "/Resources/CSS/NewStyles.css"; 
link.Attributes.Add("media", "screen, projection"); 
//add it to page head section 
this.Page.Header.Controls.Add(link); 

यहां तक ​​कि मैं इस पर बहुत कुछ खोजा गया, मैं एक अधिभावी शैली पत्रक को जोड़ने के लिए जब एक बटन क्लिक चाहते। मैंने उपर्युक्त कोड का उपयोग किया और यह मेरे लिए पूरी तरह से काम किया।

+0

और बीटीडब्ल्यू, मैं एक मास्टर पेज का उपयोग करता हूं, और बटन पाद लेख में था; तो चिपका हुआ कोड के रूप में। – Kay

+0

धन्यवाद लेकिन यह मैं ऊपर उल्लेख कर रहा था इसलिए मुझे यह समाधान नहीं चाहिए। दरअसल मुझे समाधान मिला है :) – Tarik

+0

बहुत अच्छा है! क्या आप मुझे उस समाधान को बता सकते हैं जिसे आपने समझ लिया था? – Kay

2

मैं एक कदम आगे चला गया, मैं एक विधि चाहता था जो मुझे जोड़ने के लिए असंभव बनाता है डुप्लिकेट, ClientScriptManager.RegisterClientScriptInclude() जैसे कुछ। समाधान हैडर अनुभाग में जोड़े गए नियंत्रण को आईडी देना है।

if (!String.IsNullOrEmpty(Key)) 
    if (Page.Header.FindControl(Key) != null) return; 

HtmlLink link = new HtmlLink(); 
if (!String.IsNullOrEmpty(Key)) link.ID = Key; 
link.Href = StyleUrl; 
link.Attributes.Add("type", "text/css"); 
link.Attributes.Add("rel", "stylesheet"); 
Page.Header.Controls.Add(link); 

पूरा लेख मैंने लिखा के लिए: http://www.idea-r.it/Blog.aspx?Article=49

3

मैं एक सामान्य एचटीएमएल <link> को परिभाषित करने और href विशेषता प्रोग्राम के रूप में निर्धारित किया है।

उदाहरण के लिए, पेज <head> में मेरे पास है:

cssStyle.Href = "path/to/Styles.css"; 

डिजाइन नियंत्रण रखने के ऊपर के साथ एक सा क्लीनर लगता है:

<link id="cssStyle" runat="server" rel="stylesheet" type="text/css" />. 

फिर Page_Load में cssStyle के href गुण सेट वांछित क्रम में <link> रखने पर।

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