1

在 ASP.NET MVC 4 项目中,我想引用这样的版本化脚本文件:

// 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 更新新的脚本版本时,引用会自动更新。我知道捆绑和缩小功能,但仅此而已。我只想要解决通配符的小部分。我的文件已经被缩小了,而且我不想要捆绑包。

你有一些聪明的想法如何解决这个问题吗?

4

1 回答 1

5

尽管在 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;
    }
} 

这将返回您的 Scripts 导演中的最后一个匹配项,否则将返回空字符串。

使用此调用

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

如果 1.8.2 是与您的字符串匹配的最后一个文件,将为您提供此结果。

jquery-1.8.2.min.js

希望这可以帮助您入门。

于 2013-11-01T18:18:30.700 回答