Изменить файл CSS (тему) во время выполнения (ASP.NET )

#c# #asp.net #css #theming

#c# #asp.net #css #тематизация

Вопрос:

Я хотел бы изменить файл CSS, который используется во время выполнения моего ASP.NET Веб-приложение.

Допустим, у меня есть 2 CSS-файла, red.css и blue.css .

Я попробовал следующий подход:

На моей главной странице у меня есть следующая ссылка:

<link rel="Stylesheet" ID="Styles" runat="server"/>

На основных страницах Page_Load:

Styles.Href = Global.CSSPath;

Глобальный.asax:

public static string CSSPath = "red.css"; (предполагая, что он находится в той же папке)

Этот подход работает. И, конечно, я мог бы легко реализовать некоторые функции для изменения значения CSSPath и сделать его blue.css или что-то еще — теперь я хотел бы знать, влияет ли это только на одного пользователя или на всех, использующих мое веб-приложение.

Если это влияет только на одного пользователя: отлично, спасибо! Если этого не произойдет: что мне следует сделать, чтобы иметь возможность изменять темы во время выполнения для определенного пользователя / сеанса?

Спасибо,

Деннис

Ответ №1:

Это повлияет на всех пользователей, поскольку вы считываете значение из статической (глобальной) переменной.

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

Комментарии:

1. Спасибо, это то, что я искал! Есть ли у вас какой-либо конкретный подход, поскольку я не могу получить доступ к сеансу во всех методах Global.asax?

2. У вас всегда есть возможность использовать встроенный ASP.NET Темы. В качестве альтернативы вы захотите обеспечить общее поведение на всех страницах, а не пытаться сделать это на глобальном уровне. Мы делали это в прошлом, заставляя каждую из наших страниц наследовать от базового класса, который сам является производным от System.Web.UI.Page . Здесь мы переопределяем соответствующий метод в конвейере и устанавливаем свойство здесь. Сеанс будет доступен, и пока все ваши страницы WebForms наследуют от нового базового класса, они получат это поведение «бесплатно». Надеюсь, это имеет смысл.

Ответ №2:

попробуйте добавить что-то подобное в свой html

     <script runat="server">

    protected void Page_Init(object sender, EventArgs e)
    {   
      HtmlLink csslink = new HtmlLink();
      csslink.Href = "~/red.css";
      csslink.Attributes.Add("rel", "stylesheet");
      csslink.Attributes.Add("type", "text/css");
      Page.Header.Controls.Add(csslink);    
    }
   </script>