Когда страница с темой представляется, теги link таблиц стилей в данной теме представляются прямо перед заключительным главным тегом. Кто-либо знает о способе изменить это? Существует ли способ, которым у меня могли быть те теги быть помещенным прямо после вводного главного тега?
Я знаю, что это может болеть jQuery, просто выбрав все теги link и поместив его прямо после вводного главного тега, но является там способом установить его на конце сервера?
Разъяснение Позволило нам сказать, что у меня есть единственный файл CSS (themed.css) в моей теме. В том файле CSS у меня есть определение отдельного стиля для тега Div с идентификатором теста:
#test {background-color:red; color:white;}
Давайте также скажем, что у меня есть второй файл CSS (standard.css), который НЕ находится в моей теме, но она имеет другое определение тега Div с идентификатором теста:
#test {background-color:yellow;}
У меня есть своя страница для использования темы, и у меня есть рукописный тег link для использования standard.css. Когда страница выполняется, тег link для standard.css прежде themed.css. Когда это происходит, мой тег Div с идентификатором теста имеет красный фон и белый forecolor. Если я хочу, чтобы themed.css применялся и затем standard.css для перезаписи необходимых свойств (желтый фон с белым forecolor), я хотел бы themed.css и ЗАТЕМ standard.css. Я не могу сделать этого, потому что ASP.NET помещает файлы темы прямо перед заключительным главным тегом.
Я не хочу должным быть знать, что файлы CSS моей темы являются энным тегом link в моем главном теге, и затем руководство изменяет любой индекс каждый раз, когда я могу добавить новый файл CSS за пределами своей темы.
Спасибо!
Я немного проверил Reflector и нашел кое-что, что может вас заинтересовать. Инфраструктура вызывает метод SetStyleSheet
производного объекта 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 вставляет таблицы стилей в начало тега заголовка, а Themes вводит таблицы стилей в конце .
Это соответствует предполагаемой разнице между темами и темами таблиц стилей; это означает, что тема всегда выигрывает, когда возникает конфликт между оболочкой и настройками элемента управления. Конечно, стиль в нетематическом файле .CSS с использованием атрибута ! Important
все еще может переопределить стиль темы, но размещение файлов CSS в теге заголовка стратегически облегчает возможность переопределения тем таблиц стилей.
Обратите внимание, что у вас может быть как тема таблицы стилей, так и обычная тема. Естественно, оставьте в теме таблицы стилей элементы, которые вы разрабатываете, с возможностью переопределения, а в тему темы, которые не следует переопределять.
И последнее наблюдение: метод является внутренним
и не виртуальным, поэтому вмешательство в эти два варианта потребует некоторых навыков рефлексии кунг-фу-ММА-безумия и, вероятно, не в лучшем виде. интерес стабильности или ремонтопригодности.
Как только у вашего элемента 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);
}
}