В ASP.NET 2.0 добавлена встроенная поддержка MasterPage, что очень удобно для нас. Однако, попользовавшись им в течение определенного периода времени, я обнаружил, что MasterPage не так уж идеален: вложенный MasterPage не может поддерживать интерфейс времени разработки, а проблема добавления CSS на страницу контента будет упомянута ниже.
Обычно до версии 2.0 синтаксис добавления ссылки CSS на страницу был следующим:
<link rel="stylesheet" href="css/test.css" />
Изначально это была обычная практика. Но на подстранице MasterPage возникает очень неловкая ситуация: куда нам следует поместить приведенный выше код?
Поскольку на конкретной странице содержимого MasterPage можно определить только содержимое каждого тега <asp:Content />. Согласно обычной практике, мы не можем контролировать содержимое <header/> страницы в aspx. И этот тег <link/> должен быть помещен внутри <header/>. Я попытался добавить эту строку кода внутрь <asp:Content />, но это выдаст ошибку.
В то же время мы не можем разместить ContentPlaceHolder внутри <header/> MasterPage для будущего справочного кода CSS.
Итак, я определил вспомогательный класс следующим образом:
статический общедоступный класс ControlHelper
{
static public void AddStyleSheet (страница страницы, строка cssPath)
{
Ссылка HtmlLink = новая HtmlLink();
ссылка.Href = cssPath;
link.Attributes["rel"] = "таблица стилей";
link.Attributes["тип"] = "текст/css";
страница.Header.Controls.Add(ссылка);
}
}
Таким образом, на конкретной странице мы можем добавить ссылки CSS с помощью следующего кода:
protected void Page_Load(object sender, EventArgs e)
{
ControlHelper.AddStyleSheet(this.Page, "css/projectPage.css");
}
Более того, этот код поддерживает использование на определенных страницах контента или вложенной главной странице.
На этом этапе некоторые люди могут спросить, почему CSS нужно разделять и загружать таким образом? Это необходимо? Было бы неплохо, если бы я определил CSS для всех страниц в несколько общих CSS-файлов, не правда ли?
Фактически, друзья, знакомые с созданием HTML по веб-стандартам, должны знать, что в относительно идеальном состоянии HTML страницы и CSS, используемые для представления, должны быть полностью разделены. Для нашего дизайна, основанного на веб-стандартах, мы обычно сначала создаем код позиционирования для каждого элемента div фрейма на главной странице, а также код модификации для частей верхнего и нижнего колонтитула. Они используются каждой страницей контента и будут помещены в единый CSS. Для других страниц с конкретным контентом каждая страница будет иметь свой собственный макет контента и стиль модификации, поэтому я помещаю отдельные части каждой конкретной страницы в отдельный CSS. Это формирует модель CSS, которая объединяется слой за слоем в соответствии с уровнем реализации главной страницы (которая может быть вложенной). Преимущество заключается в том, что он реализует разделение обязанностей каждого файла CSS, что упрощает понимание и поддержку.
Поскольку я давно не сталкивался с ASP.NET 2.0, вышеизложенное — всего лишь небольшой личный опыт. Если есть более удобное решение, дайте мне несколько советов.
http://rchen.cnblogs.com/archive/2006/05/23/masterpage_with_css.html