В .NET MVC мы можем сохранить CSS внутри папки Views? - PullRequest
3 голосов
/ 15 января 2009

Я работаю с ASP.Net MVC. Когда я держу CSS внутри папки Views, CSS не загружается. Кто-нибудь может мне помочь по этому вопросу?

Ответы [ 5 ]

2 голосов
/ 15 марта 2013

Мне нравится css-файл для каждой папки View, только для организации. Таким образом, я могу работать с html и соответствующими css в одном каталоге вместо большого файла css.

Вот как я это делаю:

Сначала создал «Контроллер стилей», который собирается объединить все файлы в один:

public class StyleController : Controller
{
    [OutputCache(Duration = 86400, VaryByParam = "none")]
    public ActionResult Index()
    {
        var cssFiles = Directory.GetFiles(Server.MapPath("~/Views"), "*.css", 
                                          SearchOption.AllDirectories);
        var sb = new StringBuilder();

        foreach (var cssFile in cssFiles)
        {
            sb.Append(System.IO.File.ReadAllText(cssFile));
            sb.Append(Environment.NewLine);
        }

        return Content(sb.ToString(), "text/css");
    }
}

Затем в файле макета добавьте ссылку на файл стиля

@Styles.Render("~/Style")

Это отлично подходит для разработки, но в процессе работы я скорее извлекаю вывод StyleController в физический файл и использую функции пакета (измените строку "@ Styles.Render")

1 голос
/ 03 марта 2016

Разрешить обслуживание этих файлов, добавив статические обработчики файлов в файл web.config в папке Views:

  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="JsHandler" path="*.js" verb="*" type="System.Web.StaticFileHandler" />
      <add name="MapHandler" path="*.js.map" verb="*" type="System.Web.StaticFileHandler" />
      <add name="TsHandler" path="*.ts" verb="*" type="System.Web.StaticFileHandler" />
      <add name="CssHandler" path="*.css" verb="*" type="System.Web.StaticFileHandler" />
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
1 голос
/ 15 января 2009

Если вы проверите Views \ Web.Config, вы заметите, что все HTTP-запросы будут переданы System.Web.HttpNotFoundHandler.

Вы можете, конечно, «взломать» свой выход, изменив это (конечно же, сильно обескураженный!), Но другая проблема, с которой вы можете столкнуться, заключается в том, что ваш «CSS» запрос может рискнуть быть сопоставленным действие контроллера (в зависимости от ваших маршрутов и настроек веб-сервера), чтобы вам также пришлось изменить коллекцию маршрутов в global.asax.cs

В целом: чтобы добраться туда, куда вы хотите, вам придется (сильно) изменить способ работы / структурированность ASP.NET MVC, что, вероятно, не очень хорошая идея ...

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

Большое спасибо за ответы. Проблема в том, что web.config внутри папки Views блокирует загрузку CSS. Теперь проблема решена.

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

Обновлено: нет, похоже, что оно заблокировано (404); кажется, вам придется держать их снаружи. Это имеет смысл, сравнимо с блокировкой App_Code и т. Д.

(оригинальный ответ) Как вы ссылаетесь на CSS на вашей странице просмотра / главной странице? Вы используете "/views/foo.css", "~ / views / foo.css", "foo.css" или что? Вспомните, что браузер будет думать, что он находится в «Some / Invented / Path», поэтому ваше разрешение css должно быть относительно этого - «~ /» (app-root) является самым простым.

Я просто смотрю сейчас ...

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