2011-07-08 38 views

回答

1

我發現了一個需要在我自己的項目要做到這一點,因爲我希望能夠有一個單獨的JavaScript \每個視圖的CSS文件。

我最終什麼事做是創建一個控制器聚集在服務器上爲我的文件,然後只發送一個CSS \ JS文件瀏覽器。答案可能比你要求的要複雜得多,所以我會推薦第一部分。

你可以讓你可以在每個頁面的頂部調用JS文件在TempData的字典請求添加到列表的擴展方法。然後您從Layout中調用一個單獨的方法來渲染任何其他鏈接。

這工作,因爲到TempData保持公正的要求,佈局的觀點是呈現過去(畢竟意見和諧音運行)。

我這裏有一類的完整的例子:http://pastebin.com/EUC2fAca但我還形成鏈接到我的信息彙集,所以你需要修改。要點如下:

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

您將要插入的方法來計算,因爲,它運行最後在佈局上運行它,所以你要插入的jQuery庫或其它依賴,應該是先上列表。

您的GetJS方法應該可能返回一個MvcHtmlString,其中包含您需要的所有標記。

希望有所幫助,並沒有太長篇大論=)的CSS文件和JavaScript文件,幾乎任何其他文件

+0

這種方法非常好,整齊。我以前沒有想到這一點。非常感謝你! – Seen

1

管理取決於你分類收藏,或在其他方面,你的分類。我認爲更好的問題是,我應該遵循哪些準則,以使我的項目變得更加成功。例如,無論您如何管理和分類JavaScript文件,都應儘量不要在頁面中放置太多''em',因爲每個'em'都會向服務器發出單獨的HTTP請求。或者,儘可能使命名儘可能一致,以便將來您不會對代碼感到困惑。對於CSS和JavaScript,我建議LDSW