Добавление таблиц стилей программно в 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

Другие вопросы по тегам