Добавление таблиц стилей программно в Asp.Net
Я хочу добавить StyleSheets программно в раздел главы, но один из примеров, которые я видел, по-видимому, нуждался во многих строках кода, чтобы добавить только одну таблицу стилей, хотя мне может понадобиться много:
Пример кода:
HtmlLink css = new HtmlLink();
css.Href = "css/fancyforms.css";
css.Attributes["rel"] = "stylesheet";
css.Attributes["type"] = "text/css";
css.Attributes["media"] = "all";
Page.Header.Controls.Add(css);
Я также использую метод Page.Header.RenderControl()
, но он тоже не работает. Объект null произошла ошибка.
Я также использовал вещи Page.Header.InnerHtml
и InnerText += "<link .... "/>
, но они выбросили ошибку Literal, которая, как я думаю, является общей ошибкой.
Я использовал этот код:
List<Literal> cssFiles = new List<Literal>();
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") + @""" type=""text/css"" rel=""stylesheet"" />" });
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainLayout.css") + @""" type=""text/css"" rel=""stylesheet"" />" });
AddStyleRange(cssFiles);
private void AddStyleRange(List<Literal> cssFiles)
{
foreach (Literal item in cssFiles)
{
this.Header.Controls.Add(item);
}
}
Сначала он работал, но когда я менял страницы, он переставал работать.
Я использую Master-страницу, и я пишу эти коды в файле Master.cs
, а также некоторые люди рекомендуют использовать this.Header
вместо Page.Header
, но когда я его построил, он выдает ошибку, в которой говорится, что я не могу объявить, что так.
Нельзя добавить много стилей.
Это усложняется.
Ответы
Ответ 1
Хорошо, вот решение, которое я сейчас использую:
Я создал вспомогательный класс:
using System.Web.UI;
using System.Web.UI.WebControls;
namespace BusinessLogic.Helper
{
public class CssAdder
{
public static void AddCss(string path, Page page)
{
Literal cssFile = new Literal() { Text = @"<link href=""" + page.ResolveUrl(path) + @""" type=""text/css"" rel=""stylesheet"" />" };
page.Header.Controls.Add(cssFile);
}
}
}
, а затем через этот вспомогательный класс все, что мне нужно сделать, это:
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainDesign.css", this.Page);
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainLayout.css", this.Page);
CssAdder.AddCss("~/Resources/Styles/Controls/RightMainMenu.css", this.Page);
//...
Поэтому я могу добавить столько, сколько хочу, с одной строкой простого кода.
Он также работает с отношениями главной страницы и содержимого.
Надеюсь, что это поможет.
P.S: Я не знаю разницы в производительности между этим и другими решениями, но выглядит более элегантно и легко потреблять. Если вы знаете лучшие способы, пожалуйста, дайте мне знать. Спасибо...
Ответ 2
Я вложу то, что сработало для меня:
HtmlLink link = new HtmlLink();
//Add appropriate attributes
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("type", "text/css");
link.Href = "/Resources/CSS/NewStyles.css";
link.Attributes.Add("media", "screen, projection");
//add it to page head section
this.Page.Header.Controls.Add(link);
Даже если бы я много искал, я бы добавил верхнюю таблицу стилей при нажатии кнопки. Я использовал приведенный выше код, и он отлично работал у меня.
Ответ 3
Я определяю общий HTML <link>
и программно устанавливаю атрибут href.
Например, на странице <head>
у меня есть:
<link id="cssStyle" runat="server" rel="stylesheet" type="text/css" />.
Затем в Page_Load установите свойство Href для cssStyle:
cssStyle.Href = "path/to/Styles.css";
Кажется немного чище, с оптимистичным контролем над размещением <link>
в нужном порядке.
Ответ 4
Я пошел на шаг, мне нужен метод, который делает невозможным добавить дублирующие элементы, что-то вроде ClientScriptManager.RegisterClientScriptInclude()
.
Решение состоит в том, чтобы предоставить идентификатор элементу управления, добавленному в разделе заголовка.
if (!String.IsNullOrEmpty(Key))
if (Page.Header.FindControl(Key) != null) return;
HtmlLink link = new HtmlLink();
if (!String.IsNullOrEmpty(Key)) link.ID = Key;
link.Href = StyleUrl;
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
Page.Header.Controls.Add(link);
Всю статью я написал: http://www.idea-r.it/Blog.aspx?Article=49