Рендеринг CSS с помощью Razor Engine + Включение одного запроса для нескольких файлов - PullRequest
2 голосов
/ 29 июля 2011

Вот моя ситуация ...

public partial class CssController : Controller
{
    public virtual ActionResult Merge(string[] files)
    {
        var builder = new StringBuilder();
        foreach (var file in files)
        {
            var pathAllowed = Server.MapPath(Url.Content("~/Content/css"));
            var normalizeFile = Server.MapPath(Url.Content(Path.Combine("~/Content/css", file)));
            if (normalizeFile.StartsWith(pathAllowed) == false)
            {
                return HttpNotFound("Path not allowed");
            }

            if (System.IO.File.Exists(normalizeFile))
            {
                Response.AddFileDependency(normalizeFile);
                builder.AppendLine(System.IO.File.ReadAllText(normalizeFile));
            }
        }

        Response.Cache.VaryByParams["files"] = true;
        Response.Cache.SetLastModifiedFromFileDependencies();
        Response.Cache.SetETagFromFileDependencies();
        Response.Cache.SetCacheability(HttpCacheability.Public);

        var css = dotless.Core.Less.Parse(builder.ToString(), new DotlessConfiguration());

        return Content(css, "text/css");
    }

    public string Index()
    {
        Response.ContentType = "text/css";
        return Razor.Parse(System.IO.File.ReadAllText(Server.MapPath("~/Content/css/Global.css")));
    }
}

}

Теперь метод public action был использован для получения всех css-файлов по одному запросу.Кроме того, возобновление этого и анализ файлов .less.Ну, из-за отсутствия редакторов, поддерживающих .less, мы переехали в Razor для анализа нашего css.Метод нижней строки отображает то, что мы пытаемся сделать там.Очень просто, как я могу интегрировать оба этих метода без получения ошибки.

В нашем макете мы используем этот

<link rel="stylesheet" type="text/css" href="@Url.ActionLinkWithArray("Merge", "Css", new { files = new[] { "StoreManager.less" } })" />

, чтобы получить все файлы по одному запросу.Тем не менее, я использую конфигурацию .less, когда я хочу использовать RazorEngine.

Надеюсь, это объясняет, что мне нужно делать.Кто-нибудь может помочь?

1 Ответ

4 голосов
/ 29 июля 2011

Мое любимое решение - Кассета от Эндрю Дэйви.

В вашем _Layout.cshtml вы:

<head>
    <title>@ViewBag.Title</title>
    @Assets.Scripts.Render()
</head>

И в любом представлении, требующем JavaScript:

@{
    ViewBag.Title = "My Page";
    Assets.Scripts.Reference("scripts/utils/date.js");
    Assets.Scripts.Reference("scripts/widgets/calendar.js");
}

Это сократит (включает в себя Less) и сведет все ваши сценарии и CSS в отдельные файлы для каждого.

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

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