2011-07-08 6 views
1

最近、私はjavascript/jqueryに大きく依存するプロジェクトを構築しています。部分ビューの一部がレンダリングされるときには、いくつかのJavaScriptまたはCSSスタイルを適用する必要があります。それらのファイルを効率的に/効果的に管理するためのアイデアはありますか?MVC 3のCSS、Javascriptとその命名規則の管理

答えて

1

私は自分のプロジェクトでこれを行う必要があることを発見しました。なぜなら、それぞれのビューに対して別々のjavascript \ cssファイルを用意したいからです。

私がやったのは、私のためにサーバー上のファイルを集約して、ブラウザに1つのcss \ jsファイルのみを送信するコントローラを作成することでした。答えはおそらくあなたが要求したよりも複雑なので、私は最初の部分をお勧めします。

各ページの上部で呼び出すことができる拡張メソッドを作成して、リクエストのTempDataディクショナリ内のリストにJSファイルを追加できます。次に、追加のリンクをレンダリングするレイアウトとは別のメソッドを呼び出します。

これは、TempDataが要求のためだけに保持され、レイアウトのViewが最後にレンダリングされる(すべてのビューと部分的な部分が実行された後)ためです。

私はここにクラスの完全な例を持っています:http://pastebin.com/EUC2fAcaしかし、私もアグリゲータへのリンクを形成していますので、変更する必要があります。要旨は以下のとおりである:あなたはjQueryのライブラリや最初にあるべき他の依存関係を挿入したいと思うよう

public static string JSKey = "pageJSList";  

private static void AddToDictionary(HtmlHelper helper, string[] files, string key) 
{ 
    if (files == null || files.Length == 0) 
     return; 

    TempDataDictionary dict = helper.ViewContext.TempData; 
    if (!dict.ContainsKey(key)) 
     dict.Add(key, new List<string>()); 

    (dict[key] as List<string>).AddRange(files); 
} 

private static void InsertToDictionary(HtmlHelper helper, string[] files, string key) 
{ 
    if (files == null || files.Length == 0) 
     return; 

    TempDataDictionary dict = helper.ViewContext.TempData; 
    if (!dict.ContainsKey(key)) 
     dict.Add(key, new List<string>()); 

    (dict[key] as List<string>).InsertRange(0, files); 
}  

public static void AddJS(this HtmlHelper helper, params string[] files) 
{ 
    AddToDictionary(helper, files, JSKey); 
} 

public static void AddJSToTop(this HtmlHelper helper, params string[] files) 
{ 
    InsertToDictionary(helper, files, JSKey); 
} 

public static MvcHtmlString GetJsTagHtml(HtmlHelper helper) 
{ 
    var files = helper.ViewContext.TempData[JSKey] as List<string>; 
    StringBuilder tags = new StringBuilder(); 
    string jsTemplate = "<script type=\"text/javascript\" src=\"/Scripts/{0}\"></script>"; 

    foreach (string file in files) 
    { 
     tags.AppendLine(String.Format(jsTemplate, file)); 
    } 

    return MvcHtmlString.Create(tags.ToString()); 
} 

あなたは、再び、それは最後の実行されるため、Insertメソッドは、レイアウト上でそれを実行したいと思いますリスト。

GetJSメソッドは、必要なすべてのタグを含むMvcHtmlStringを返す必要があります。助けと希望が長すぎる息切れれていなかった

=)CSSファイルやJavaScriptファイルとほぼすべての他のファイルの

+0

この方法はとても素敵できれいです。私はこれまで考えなかった。どうもありがとうございました! – Seen

1

管理は、あなたの分類お気に入り、または他の用語では、あなたの分類に依存します。より良い質問は、私のプロジェクトをより成功させるために、どのガイドラインを守るべきかということです。たとえば、JavaScriptファイルを管理したり分類したりする場合は、ページに多くのコンテンツを持たないようにしてください。各ページに別々のHTTPリクエストが送信されます。または、可能な限り名前を付けて一貫性を保つようにしてください。将来、あなたのコードに困惑することはありません。 CSSとJavaScriptについては、LDSWをお勧めします。