Динамическая установка значений CSS с использованием ASP.NET - PullRequest
1 голос
/ 16 января 2009

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

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

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

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

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

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

Ответы [ 7 ]

5 голосов
/ 16 января 2009

Можно ли сохранить файл 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 будет динамически генерироваться во время выполнения.

1 голос
/ 16 января 2009

Звучит как работа для сценария NAnt [ link ] для меня. С ними довольно легко работать и они хорошо документированы.

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

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

1 голос
/ 16 января 2009

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

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

<link rel="stylesheet" href="<%= ConfigurationManager.AppSettings("css-server") %>style.css" />
0 голосов
/ 17 января 2009

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

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

0 голосов
/ 16 января 2009

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

0 голосов
/ 16 января 2009

Это распространенная проблема. То, что мы делаем, - это отдельные файлы 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. Кроме того, вы можете настроить тестовый сервер на тот же путь, но по моему опыту это решение работает.

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