Добавление таблиц стилей программно в Asp.Net - PullRequest
25 голосов
/ 31 мая 2010

Я хочу добавить 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 ]

44 голосов
/ 04 июня 2010

Хорошо, вот решение, которое я сейчас использую:

Я создал вспомогательный класс:

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: Я не знаю разницы в производительности между этим и другими решениями, но он выглядит более элегантным и простым в использовании.

5 голосов
/ 31 мая 2010

Я вставлю вещь, которая работала для меня:

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 голосов
/ 23 января 2015

Я определяю общий 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> в желаемом порядке.

2 голосов
/ 31 июля 2012

Я прошел через шаг, я хотел метод, который делает невозможным добавление дубликатов, что-то вроде 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...