Как вернуть динамический CSS с ASP.NET MVC? - PullRequest
17 голосов
/ 27 апреля 2010

Мне нужно решение, которое позволит мне выполнить следующее:

  • Возвращение CSS, который динамически генерируется методом действия
  • Выбор файла CSS в зависимости от параметра запроса или файла cookie
  • Использование инструмента для объединения и сжатия (минимизации) CSS

В настоящее время я рассматриваю, почему в ASP.NET MVC нет CssResult и может ли быть причина его отсутствия. Не будет ли создание собственного ActionResult лучшим способом для этого? Есть ли какой-то другой способ, который я упустил, чтобы делать то, что мне нужно?

Будут также оценены любые другие предложения или советы, которые могут иметь отношение до того, как я приступлю к выполнению этой задачи:)

Ответы [ 3 ]

28 голосов
/ 27 апреля 2010

Вам необходимо вернуть FileResult или ContentResult с типом контента text/css.

Например:

return Content(cssText, "text/css");
return File(cssStream, "text/css");

РЕДАКТИРОВАТЬ : Вы можете сделать вспомогательный метод Css в вашем контроллере:

protected ContentResult Css(string cssText) { return Content(cssText, "text/css"); }
protected FileResult Css(Stream cssStream) { return File(cssStream, "text/css"); }
5 голосов
/ 27 апреля 2010

Нет необходимости создавать собственный тип ActionResult. Поскольку CSS "просто текст", вы должны использовать ContentResult. Предполагая, что вы унаследовали класс Controller, просто выполните:

return Content(cssData, "text/css");
0 голосов
/ 27 апреля 2010

В настоящее время я рассматриваю, почему в ASP.NET MVC нет CssResult и может ли быть причина его отсутствия.

Просто потому, что команда была занята, и, очевидно, нужно приложить некоторые усилия для добавления ActionResults для всех случаев в жизни.

Не будет ли создание собственного ActionResult лучшим способом для этого?

Это был бы правильный способ сделать это. Я добавил RssActionResult и AtomActionResult для своих нужд. Также разумно добавить больше типов для документов, PDF, изображений и т. Д.

Возвращение CSS, который динамически генерируется методом действия

Также имейте в виду, что браузер обычно кэширует CSS, если он не видит некоторые изменения в URL. Добавление всегда увеличивающегося параметра является обычным решением.

<link rel="stylesheet" href="http://site.com/styles.css?v=26">

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

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