ASP.NET - Как включать CSS, только если он уже не включен?

Я использую рев кода для динамичного включения файла 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);

Проблема: Я хочу сделать это только однажды, и только если это не alrealy, включенный в страницу.

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

Править:

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

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

if (!Page.ClientScript.IsClientScriptIncludeRegistered("jsScript"))
{
    Page.ClientScript.RegisterClientScriptInclude("jsScript", ResolveUrl("~/Utilities/myScript.js"));
}
5
задан Matthieu Cormier 25 October 2019 в 12:19
поделиться

3 ответа

Это ...

я использовал следующий код:

        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);
        }
4
ответ дан 14 December 2019 в 08:48
поделиться

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

EDIT: Порядок имеет значение, только если вам нужно иметь возможность переопределять стили css в последующих таблицах стилей.

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

0
ответ дан 14 December 2019 в 08:48
поделиться

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

3
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: