ASP.NET - Как включить CSS, только если он вообще не включен? - PullRequest
4 голосов
/ 02 марта 2010

Я использую код ниже для динамического включения файла CSS:

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);

Проблема в том, что я хочу сделать это только один раз, и только в том случае, если это не указано на странице.

Как мне проверить, включен ли он уже?

Edit:

Ответы, подсказывающие мне включить в загрузку страницы с помощью !IsPostBack, не решат мою проблему, так как этот код будет находиться внутри пользовательского веб-элемента управления, и моя страница может иметь такой же пользовательский элемент управления.

Например, я использую код ниже, чтобы сделать это с JavaScript:

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

Ответы [ 3 ]

4 голосов
/ 03 марта 2010

Сделал это ...

код, который я использовал, выглядит следующим образом:

        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);
        }
3 голосов
/ 03 марта 2010

Почему бы не в вашем пользовательском элементе управления добавить значение в HttpContext.Current.Items, указывающее, что таблица стилей уже включена? Это избавит вас от необходимости просматривать каждый элемент управления заголовка для каждого экземпляра пользовательского элемента управления.

0 голосов
/ 02 марта 2010

В большинстве случаев вам не важно, будет ли CSS включен несколько раз.Как правило, это не проблема.

РЕДАКТИРОВАТЬ: Порядок имеет значение, только если вам нужно иметь возможность переопределить CSS-стилей в последующих таблицах стилей.

В ASP.NET, вы можете включить CSS в свою главную страницу (при условии, что у вас есть), и тогда он будет гарантированно включен только один раз.Поскольку мастер-страницы доступны программно (даже из пользовательских элементов управления), вы можете даже написать некоторые свойства (или методы), которые позволят вам контролировать, какие внешние элементы CSS включать, когда.

...