2013-09-25 31 views
1

在ASP.NET MVC 4項目ASP.NET MVC參考腳本文件,我想引用一個版本的腳本文件是這樣的:配版通配符(不綁定)

// Just some pseudo-code: 
<script src="@Latest("~/Scripts/jquery-{0}.min.js")"></script> 

// Resolves to the currently referenced script file 
<script src="/Scripts/jquery-1.10.2.min.js"></script> 

,這樣當新的腳本版本通過NuGet更新,引用會自動更新。我知道bundling-and-minification feature,但它只是很多。我只想要解決通配符的小部分。我的文件已經被縮小了,我也不想要這些軟件包。

你有一些聰明的想法如何解決這個問題?

+2

使用捆綁包,創建一個新的捆綁包中有一個文件(jQuery),就是這樣。 – Aviatrix

+0

@Aviatrix這看起來很實用,但我認爲使用稱爲「捆綁和縮小」的功能沒有任何實際的捆綁需求並且沒有什麼可以縮小。那麼這是一個相當高的開銷,不是嗎? – thmshd

+1

如果您使用它,它已經在那裏。我懷疑這是內部緩存,所以開銷應該接近於零。你總是有選擇寫你需要的工具:) – Aviatrix

回答

3

儘管在MVC中使用Bundling有點過度,但我認爲這將是您最好的選擇。它已經被完成並被驗證,所以爲什麼花更多的時間來編寫一些專有代碼。

這就是說,如果你想要一個簡單的樣本,你可以做什麼,那麼你可以嘗試以下。

public static class Util 
{ 
    private const string _scriptFolder = "Scripts"; 

    public static string GetScripts(string expression) 
    { 
     var path = HttpRuntime.AppDomainAppPath; 
     var files = Directory.GetFiles(path + _scriptFolder).Select(x => Path.GetFileName(x)).ToList(); 
     string script = string.Empty; 
     expression = expression.Replace(".", @"\.").Replace("{0}", "(\\d+\\.?)+"); 
     Regex r = new Regex(@expression, RegexOptions.IgnoreCase); 

     foreach (var f in files) 
     { 
      Match m = r.Match(f); 
      while (m.Success) 
      { 
       script = m.Captures[0].ToString(); 

       m = m.NextMatch(); 
      } 
     } 

     return script; 
    } 
} 

這將返回您腳本導演中的最後一個匹配或它將返回空字符串。

使用此電話

@Html.Raw(MvcApplication1.Util.GetScripts("jquery-{0}.min.js")) 

會得到你這樣的結果,如果是1.8.2符合您的字符串的最後一個文件。

jquery-1.8.2.min.js 

希望這會幫助你開始。

+0

非常好,謝謝你提供,你的個人意見和建議,但也是一個解決方案腳本。 – thmshd