Динамическая установка значений CSS с помощью ASP.NET

Я работаю над сайтом, где изображения и другие ресурсы будут расположены в отдельном домене от основного контента сайта. Мы будем использовать что-то вроде «www.example.com» для основного сайта, а затем «images.example.com» для всех дополнительных ресурсов для стилей и т. д.

При разработке сайта я сохраню все эти ресурсы на локальном dev. машины. Проблема здесь в том, чтобы поддерживать согласованность ссылок CSS между производственным сервером и средами разработки.

Я хотел создать ключ web.config, в котором будет храниться URL-адрес сервера изображений. Затем при переходе от разработки к производству я мог просто изменить значение web.config, и все было бы сделано.

Есть ли способ добавить значение в файл CSS, динамически или иным образом, из некоторого места в конфигурации или классе C#? Или я ошибаюсь?

Кроме того, я ограничен использованием .NET 2.0, если это имеет значение.

ОБНОВИТЬ
Чтобы подробнее остановиться на этом, я знаю, что могу использовать параметр web.config для URL-адресов серверных элементов управления. Они уже генерируются динамически. Что меня больше интересует, так это то, какие варианты у меня есть для изменения (или выполнения "что-нибудь") статических файлов CSS, которые позволят мне изменять URL-адреса для таких вещей, как ресурсы фонового изображения, на которые будут ссылаться в CSS. Могу ли я что-нибудь сделать, кроме поиска / замены значений с помощью моей IDE? Возможно, что-то, что можно сделать автоматически с помощью сценария развертывания?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
9 073
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы обманули свой вопрос:

https://stackoverflow.com/questions/449236/dynamically-setting-css-values-using-asp-net

вы должны удалить это, другой вопрос закрыт

jcollum 16.01.2009 04:59

Похоже, это какой-то ТАКОЙ глюк (может быть, кнопка отправки в вопросе была дважды нажата?). Я удалил это.

Dan Herbert 16.01.2009 04:59

Это распространенная проблема. У нас есть отдельные файлы web.config для каждой среды. В web.config есть ключ appSettings, и любые значения конфигурации попадают туда вот так.

<appSettings>
<add key = "ImagePath" value = "d:\websites\www.site.com\www\images\" />
<appSettings>

При установке элемента управления изображением в коде позади используйте следующее:

myImage.ImageUrl = + _

System.Configuration.ConfigurationSettings.AppSettings ("ImagePath") + "image1234567890.jpg"

Просто измените ключ ImagePath, чтобы он соответствовал пути на рабочем сервере или сервере qa. Кроме того, вы можете сделать так, чтобы тестовый сервер имел тот же путь, но, по моему опыту, это решение работает.

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

Dan Herbert 16.01.2009 04:57
Ответ принят как подходящий

Можно ли сохранить файл CSS на сервере изображений? Если это возможно, вы можете сделать все ссылки на изображения относительными, а затем вам просто нужно обновить ссылку на файл css.

<link rel = "stylesheet" href = "<%= ConfigurationManager.AppSettings("css-server") %>style.css" />

Если вы по-прежнему хотите отправлять или генерировать файл css динамически:

Файлы css не обязательно должны заканчиваться на css. aspx в порядке. Вы могли сделать это:

<link rel = "stylesheet" href = "style.aspx" />

а затем на вашей странице style.aspx:

protected void page_load(){
    Response.ContentType = "text/css";
    if (ConfigurationManager.AppSettings("css-server") == "local") {
        Server.Transfer("css/local.css");
    } else {
        Server.Transfer("css/production.css");
    }   
}

Если вы все еще хотите динамически сгенерировать файл css, я бы использовал HttpHandler, установил тип содержимого на «text / css», а затем сгенерировал css с Response.Write. Если вы настаиваете на том, чтобы страница заканчивалась на css, вы всегда можете зарегистрировать css для перехода на asp.net в IIS, затем для входящих запросов в запросе global.asax application_Begin, если файл заканчивается на .css, используйте httpcontext.current.rewritepath вашему обработчику.

Это приведет к тому, что style.css будет динамически генерироваться во время выполнения.

Это интересная идея, о которой я не думал. Любая идея о том, как я могу заставить это работать с темами ASP.NET. Похоже, что это сделает темы невозможными (не большая проблема, но может быть проблематичной)

Dan Herbert 16.01.2009 05:23

у вас могут быть файлы css все еще в каталоге тем для генерации ссылок, но просто пусть они будут пустыми файлами, которые никогда не будут затронуты, поскольку путь будет переписан на ваши страницы css, генерирующие aspx.

Shawn 16.01.2009 05:27

Мы используем такой метод для динамического изменения цвета наших сайтов в зависимости от того, в каком разделе вы находитесь. Работает приятно.

Zhaph - Ben Duguid 16.01.2009 13:28

Я бы создал серверный элемент управления для своего CSS, который регистрировал блок сценария css при загрузке страницы. Вы можете очень легко изменить все пути в этой точке программно.

Как насчет того, чтобы поместить заполнитель на веб-страницу, а затем выбрать, какой файл CSS использовать (PROD, TEST и т. д.) Во время выполнения и добавить его в хранитель места?

Я думаю, что в обновлении была правильная идея ...

<link rel = "stylesheet" href = "<%= ConfigurationManager.AppSettings("css-server") %>style.css" />

Мне кажется, это работа для сценария NAnt [ссылка на сайт]. С ними довольно легко работать, и они хорошо документированы.

Таким образом, ваш код не меняет ваши ссылки css, они обновляются во время развертывания. Это не проблема кода, это проблема развертывания, поэтому мне кажется более "правильным" ее решение. Таким образом, вы будете знать, правильно ли он загружается (с правильными изображениями) при первой загрузке каждый раз. Скрипты NAnt - это хорошо иметь в своем арсенале инструментов.

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

Возможно, вы сможете что-то сделать с файлом hosts на вашем сервере (ах) разработки? Таким образом, вам не придется менять какой-либо код.

Однако можно отправлять файлы с расширением .css через движок asp.net. У вас также могут быть обработчики .ashx, которые возвращают действительный CSS и ссылаются на эти обработчики в тегах. Хотя это похоже на пустую трату процессора для материала, который на 90% состоит из статического текста.

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