我使用.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
吗?是否有更好的方法来解决这个问题?
答案 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
呈现视图相当容易。