【问题标题】:Managing view page scripts in ASP.NET MVC在 ASP.NET MVC 中管理视图页面脚本
【发布时间】:2011-12-01 05:58:16
【问题描述】:

我想听听您对在 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 扩展,它缩小(如果需要)存储的脚本并呈现它们,例如:

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

我认为这是一种解决方案,但它要求脚本包含和脚本位于母版页的底部。这意味着包含的脚本不在 head 部分中。

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

【问题讨论】:

    标签: javascript asp.net-mvc


    【解决方案1】:

    您是否考虑过使用现有的工具来执行此类操作,例如 Cassette(以前称为 Knapsack)?

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

    我还没有亲自使用过它(还),但它看起来很不错,而且它似乎应该完全满足您的需求(以及更多)。值得注意的是,commercial use 的成本很小。

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

    【讨论】:

    • 谢谢!我去看看。
    • 您将如何与 Cassette 并行加载脚本?
    • 注意:它不是 MIT,不是 GPL+商业 :-)
    • @Ryan 这个想法是 Cassette 将它捆绑到一个请求中,因此不需要加载多个脚本:-)
    【解决方案2】:

    Telerik 有一个脚本注册实用程序,可以完全按照您的方式进行操作。

    http://www.telerik.com/help/aspnet-mvc/web-assets-working-with-javascript-web-assets.html

    作为奖励,它还可以进行压缩。

    是的,它在底部呈现脚本。
    就我个人而言,我通常以通常的方式在顶部包含一些重要的脚本,其余的则使用脚本注册器。这样我就可以在页面加载期间使用一些脚本。

    telerik 脚本注册器是其 MVC 套件的一部分。 http://www.telerik.com/products/aspnet-mvc.aspx

    【讨论】:

    • Telerik 的注册器不会缩小。他们只会合并和 gzip 压缩你的东西。
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多