2013-08-06 29 views
1

我想做到以下幾點:asp.net的MVC 4:添加參數Scripts.Render路徑

@Scripts.Render("~/bundles/jquery?version=1"]) 

版本值必須是動態的,應與在cookie中定義的值。

如何將此參數添加到Scripts.Render?

我已經試過類似的東西用jQuery,但沒有運氣:

@Scripts.Render("~/bundles/jquery?version=" + $.cookie('version')) 

回答

0

我所知@ Scripts.Render( 「〜/包/ jQuery的」)是不是一個路徑。這只是名字。所以,如果你想使用不同的版本,你應該在你的BundleConfig創建兩個包:

public static void RegisterBundles(BundleCollection bundles) 
     { 
      bundles.Add(new ScriptBundle("~/bundles/jquery-ver191").Include(
         "~/Scripts/jquery-1.9.1js")); 

       bundles.Add(new ScriptBundle("~/bundles/jquery-ver202").Include(
         "~/Scripts/jquery-2.0.2js")); 
} 

比你可以在你的視圖中調用所需版本:

@Scripts.Render("~/bundles/jquery-ver191") 

@Scripts.Render("~/bundles/jquery-ver202") 

EDITED :在你的評論:但是這個BundleConfig中的默認代碼是你想要的。

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
         "~/Scripts/jquery-{version}.js")); 

或者您沒有oppurtunity刪除其他版本exept最新?

+0

感謝您的回覆,但這不是我問過的。我猜'版本'參數是誤導...我只是想在束路徑的末尾添加一個查詢參數。每次將新版本代碼上傳到Web服務器時,該參數都會發生更改,以便確保客戶端獲得最新版本的腳本(這將強制刷新緩存) – Sam

+0

@Sam I編輯過有點我的答案。爲什麼你不能以這種方式使用默認代碼? –

+0

但在這裏你引用的庫的版本(在這種情況下,jQuery)。我正在討論如何在路徑末尾添加時間戳或任何字符串,以強制高速緩存到期。是否有意義 ? – Sam

3

如果啓用了優化,MVC會自動向綁定文件中添加一個版本參數,如果該文件包中的一個文件發生了更改,那麼這些文件會被瀏覽器緩存,並在服務器發生更改時從服務器重新加載。

在Debug中默認禁用優化,但在web.config中將編譯調試屬性設置爲true時執行優化。另外,您可以在代碼中啓用它們,就像這樣:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
      "~/Scripts/jquery-{version}.js")); 

    // Code removed for clarity. 
    BundleTable.EnableOptimizations = true; 
} 

有關詳情請參閱 http://www.asp.net/mvc/overview/performance/bundling-and-minification,特別是部分「控制捆綁和縮小」和「捆綁緩存」。

0

創建一個mvc幫助程序,用於更改生成的html並添加版本。以下示例適用於生成單個文件或多個文件(調試模式)的情況。

public static HtmlString GetScriptsWithVersion() 
{ 
    const string VERSION = "2.0.1"; //or get the version where you want 
    const string SCRIPT_END = "\"></script>"; 
    string html = Scripts.Render("~/bundles/ui").ToString(); 
    string versionParam = "?v=" + VERSION 
    html = html.Replace(SCRIPT_END, versionParam + SCRIPT_END); 
    return new HtmlString(html); 
}