在运行时为ASP.NET

时间:2015-04-27 11:55:38

标签: javascript asp.net asp.net-mvc-5 minify

我使用.cshtml文件在ASP.NET MVC控制器中生成动态.js文件。因此.js文件永远不会存在于磁盘上,但仅在运行时存储在内存中。它的工作原理如下。

浏览器加载javascript ...

<script async src='http://example.com/script.js'></script>

...从我的MVC Controller端点获取并生成:

[HttpGet]
[Route("script.js")]
public ActionResult GetScript()
{
    // This takes a .cshtml template-file and returns a generated .js file
    return new JavascriptViewResult(viewName, viewModel);
}

有没有办法缩小在运行时返回的结果javascript文件?我看了System.Web.Optimization.JsMinify,但我不确定如何让它工作。我可以写一些HttpHandler吗?是否有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:4)

我遇到了类似的问题,经过一些搜索,我遇到了this个问题。您所需要做的就是:

using Microsoft.Ajax.Utilities;
//...
string minifiedScript = new Minifier().MinifyJavaScript(yourJs);

我无法相信这很简单,却很难找到。

P.S。它似乎是 Microsoft Ajax Minifier 库的一部分,但我不记得曾经手动安装它,因此它既可以是MVC的一部分,也可以附带System.Web.Optimization

我没有注意到从视图生成JS的部分。在这种情况下,使用bundle可能是一个解决方案或将视图呈现给string(但我不熟悉它在 Spark 视图引擎中的完成方式),然后将其传递给{{1} }。

编辑:另一个解决方案(albite有点复杂)将在视图中调用Minifier.MinifyJavaScript并在局部视图中填充实际的JS。我不知道 Spark ,但在 Razor 中,从另一个视图向Minifier.MinifyJavaScript呈现视图相当容易。