Добавление таблиц стилей программно в Asp.Net
Я хочу добавить StyleSheets программно в разделе head, но мне показалось, что для одного из примеров мне понадобилось много строк кода, чтобы добавить только одну таблицу стилей, хотя мне может понадобиться много:
Пример кода:
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 .... "/>
вещи, но они бросили буквальную ошибку, которая, я думаю, распространенная ошибка.
Я использовал этот код:
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.cs
файл, а также некоторые люди рекомендуют использовать this.Header
вместо Page.Header
но когда я его собрал, выдает ошибку, которая говорит, что я не могу объявить это так.
Не должно быть так сложно добавить много стилей.
Это становится сложным.
4 ответа
Хорошо, вот решение, которое я сейчас использую:
Я создал вспомогательный класс:
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);
//...
Поэтому я могу добавить столько, сколько захочу, с помощью одной строки простого кода.
Он также работает с отношениями Masterpage и page page.
Надеюсь, поможет.
PS: я не знаю разницу в производительности между этим и другими решениями, но он выглядит более элегантным и простым в использовании.
Я вставлю вещь, которая работала для меня:
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);
Даже если я много искал по этому вопросу, я бы добавил переписывающую таблицу стилей при нажатии кнопки. Я использовал приведенный выше код, и он работал отлично для меня.
Я определяю общий 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>
в желаемом порядке.
Я сделал шаг вперед, я хотел метод, который делает невозможным добавление дубликатов, что-то вроде 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