2011-07-29 1 views
2

ための一つの要求を有効にする+と私の状況です...は今パブリックアクションメソッドは、1つのリクエストに応じてすべてのCSSファイルを取得するために使用されたレイザーエンジンは、ここで複数のファイル

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"))); 
    } 
} 

}

をCSSをレンダリングします。また、それを再解析して.lessファイルを解析する。まあ、サポートしていない編集者がいないため、私たちはCSSを解析するためにRazorに移動しました。下の文字列メソッドは、ここで何をしようとしているのかを表示します。まったく単純で簡単ですが、どうすればこれらのメソッドをエラーなく統合できますか?私たちのレイアウトで

、我々は一つのリクエスト上のすべてのファイルをプルするこの

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

を使用しています。それでも、私はRazorEngineを使用するときに.less Configurationを使用しています。

私はこれが私の行うべきことを説明してくれることを願っています。誰も助けることができますか?

答えて

4

私のお気に入りの解決策は、Andrew DaveyのCassetteです。もしあなた_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を凝縮各。

これは役立つかもしれませんが、確かに簡単です。現在の問題の解決策を探しているかのように見えますが、これは間違いなく選択肢です。

+0

私にこれを見せてくれてありがとう。これらのユーティリティのようなすべての新生児です。 html5、mvc3、およびエンティティフレームワーク4.1を使って作業することで、このような基本的なシステムレベルの作業を行うためのコードをたくさん作成しています。カセットはこれまでのところ印象的で、非常に積極的に更新しています。 –

+0

ええ、私はすべてのナゲットプロジェクトを最近よく見ていて、そこに何があるかを見てきました。私はある日これを見つけました。 – Buildstarted

+0

ちょうどこのより成熟したプロジェクトに直面した:http://clientdependency.codeplex.com/私はそれがMVC2のために設計されたと思うが、Razorでもうまくいくようだ。 –

関連する問題