Подтвердить что ты не робот

Добавление таблиц стилей программно в 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, но когда я его построил, он выдает ошибку, в которой говорится, что я не могу объявить, что так.

Нельзя добавить много стилей.

Это усложняется.

4b9b3361

Ответ 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