我想了解您在ASP .NET MVC中管理脚本的看法。我特别好奇有两个问题:
就像在许多项目中一样,我的视图由几个部分视图和编辑器模板组成。我喜欢在同一个代码实体中保留与这些视图相关的脚本,例如。
SigningKeysForm局部视图应该有自己的JQuery / JQueryUI脚本。
这意味着呈现此部分视图的任何视图都应包含JQuery / JQueryUI脚本文件。
另一个问题是当一个视图由几个这样的部分视图组成时,它意味着部分视图中的javascipt将位于生成的html中的几个位置。
我目前解决这些问题的方法是利用ASP .Net MVC中自上而下的视图解析。
为了解决第一个问题,我定义了一个HtmlHelper扩展来包含一个脚本,例如
<% Html.RequireScript(Scripts.JQuery); %>
这种方式在每个局部视图和视图中我明确地调出了所需的脚本。这个方法的实现是在当前的HttpContext上创建一个HashSet并在那里添加所需的脚本。
在我的母版页中,我有另一个HtmlHelper扩展,它检查HttpContext并呈现脚本包含标记,例如:
<%=Html.RenderScriptIncludeTags()%>
这样我就可以跟踪视图的要求并只渲染所需的脚本包含。
对于视图脚本,我采用了类似的方法。我使用自定义的Asp .Net用户控件,而不是将其内容存储在HttpContext上的缓冲区中,例如:
<mvc:script runat="server">
$(function(){
alert("Hello " + "<%=Model.Name%>");
});
</mvc:script>
再次在Master视图中,我有一个HtmlHelper扩展,它会缩小(如果需要)存储的脚本并呈现它们,例如:
<%=Html.RenderScripts()%>
</body>
我认为这可以作为一种解决方案,但它要求脚本包含和脚本位于母版页的底部。这意味着脚本包含不在head部分。
我想知道是否有更好的方法来管理脚本要求和使用ASP .NET MVC查看页面脚本。
答案 0 :(得分:3)
您是否考虑过使用现有的工具来完成这类工作,例如Cassette(之前称为Knapsack)?
Cassette可自动对所有JavaScript,CoffeeScript,CSS,LESS和HTML模板进行排序,连接,缩小,缓存和版本化。
我还没有亲自使用它(但是)它看起来很不错,而且看起来它应该完全符合你的需要(以及更多)。值得注意的是commercial use的成本很低。
编辑:现在在麻省理工学院许可下发布:)
答案 1 :(得分:1)
Telerik有一个脚本注册器实用程序,可以完成您正在执行的操作。
http://www.telerik.com/help/aspnet-mvc/web-assets-working-with-javascript-web-assets.html
作为奖励,它也会进行压缩。
是的,它将脚本呈现在底部 就个人而言,我通常会在常规方式中包含一些重要的脚本,其余的则包含在scriptregistrar中。这样我可以在加载页面时使用一些脚本。
telerik脚本注册器是其MVC套件的一部分。 http://www.telerik.com/products/aspnet-mvc.aspx