2011-10-05 44 views
3

我想了解一下关于管理ASP .NET MVC中的脚本的意见。有2个问题,我特别好奇:管理ASP.NET MVC中的视图页面脚本

  1. 跟踪脚本包括视图的依赖
  2. 管理和涅槃视图脚本

就像在很多项目我的意见是由几个部分意见和编辑器模板。我喜欢在相同的代码实体中保留与这些视图相关的脚本,例如

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> 
在主视图我有一个扩展的HtmlHelper再次

其中minifies(如果需要)的存储脚本和使他们如:

<%=Html.RenderScripts()%> 
</body> 

我想这样的作品作为一个解决方案,但它需要的脚本,包括和脚本是在母版页的底部。这意味着脚本包含不在头部分。

我想知道是否有更好的方法来管理脚本需求和使用ASP .NET MVC查看页面脚本。

回答

3

你有没有想过使用现有的工具来做这种事情,比如Cassette(以前叫做Knapsack)?

Cassette自动对所有JavaScript,CoffeeScript,CSS,LESS和HTML模板进行排序,连接,缩小,缓存和版本。

我还没有亲自使用它(但),但它看起来很不错,而且看起来它应该完全按照您的需要(以及更多)进行操作。值得注意的是的成本很低。

编辑:现在在MIT许可下发布:)

+0

谢谢!我会看看它。 – Atacan

+0

看起来很有趣。 :) –

+0

你会如何与Cassette并行加载你的脚本? – Ryan

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

+0

Telerik的注册商不会缩小。他们只会合并和压缩你的东西。 – Achilles