Search code examples
asp.netcssincludestylesheetverify

ASP.NET - How to include CSS only if it isn't already included?


I use the code bellow to dynamically include a CSS file:

HtmlHead head = (HtmlHead)Page.Header;
HtmlLink link = new HtmlLink();
link.Attributes.Add("href", Page.ResolveClientUrl("~/App_Themes/Default/StyleSheet.css"));
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
head.Controls.Add(link);

The problem is: I want to do it only once, and only if it isn't alrealy included in the page.

How do I verify if it is already included?

Edit:

Answers telling me to include in page load using !IsPostBack won't solve my problem, as this code will be inside a Web User Control and my page may have a lot of the same user control.

For example, I use the code below to do it with javascript:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("jsScript"))
{
    Page.ClientScript.RegisterClientScriptInclude("jsScript", ResolveUrl("~/Utilities/myScript.js"));
}

Solution

  • Did it...

    the code I used is as follows:

            Boolean cssAlrealyIncluded = false;
            HtmlLink linkAtual;
            foreach (Control ctrl in Page.Header.Controls)
            {
                if (ctrl.GetType() == typeof(HtmlLink))
                {
                    linkAtual = (HtmlLink)ctrl;
    
                    if (linkAtual.Attributes["href"].Contains("datePicker.css"))
                    {
                        cssAlrealyIncluded = true;
                    }
                }
            }
    
            if (!cssAlrealyIncluded)
            {
                HtmlLink link = new HtmlLink();
                link.Attributes.Add("href", ResolveUrl("~/Utilities/datePickerRsx/datePicker.css"));
                link.Attributes.Add("type", "text/css");
                link.Attributes.Add("rel", "stylesheet");
                Page.Header.Controls.Add(link);
            }