Scriptmanager Asp.Net Mvc

17

我希望在新的Asp.net MVC模型中使用一些ScriptManager功能:

1- 脚本合并
2- 解决外部Javascript文件的不同路径问题
3- 最小化和Gzip压缩

这里是我找到的内容,但我不确定它是否适用于MVC模型。总的来说,在MVC模型中处理Javascript代码的好方法是什么?


我问了同样的问题,请参见https://dev59.com/b3VC5IYBdhLWcg3wfxQ8,还给Phil Haack和Scotty H发送了电子邮件,但没有得到任何回复!! - redsquare
5个回答

18
也许你可以创建一个新的 "Scripts" 控制器,该控制器具有不同的操作,为压缩的JS文件提供不同的组合。由于MVC是基于资源导向的方法设计的,即URL现在是编程模型的中心,为什么不为您的Javascripts定义简单的URI呢?
例如,在您的视图中,您可以像这样引用您的文件:
<script src="http://your_domain/scripts/all"/>

这将调用您的“all”操作,导致发送所有已压缩的脚本文件。

当然,您现在需要编写组合和压缩的代码,或者可能在内部重用Scriptmanager,我不知道是否可能。

不过这只是一个想法,目前我正在我的主页面直接引用单独的javascript文件。


我猜它必须是一个静态的js文件,URL中有不同的域名(无cookie)。 在这种情况下,ScriptController不起作用。 - Ofigenn

10
试试这个: http://www.codeplex.com/MvcScriptManager MvcScriptManager旨在将AjaxControlToolkit的ToolkitScriptManager中可用的某些关键功能移植到当前的ASP.NET MVC框架中。您可以将其用作ASP.NET MVC应用程序中的控件。
特点:
1.脚本组合(或连接)。使用MvcScriptManager声明的脚本将在呈现页面时动态组合成单个脚本文件请求。
2.发布模式下的脚本最小化(或压缩)。最小化过程仅在引用特定脚本的第一个请求时执行一次。后续请求将使用缓存中的压缩脚本内容(有关详细信息,请参见#5)。可以为每个脚本启用/禁用压缩。
3.为独立脚本文件渲染本地化资源。如果指定,本地化字符串将附加到脚本中。
4.支持在输出脚本时配置HTTP压缩和过期设置。
5.带有文件依赖项的脚本缓存。脚本文件内容被缓存,因此呈现组合脚本文件将更具性能。缓存依赖于物理文件,因此文件系统中的任何脚本更新都会立即反映在缓存中。
6.根据运行环境支持以调试/发布模式呈现脚本。
7.解决独立脚本文件的不同路径。
8.支持在单个页面(或主页面)上使用多个MvcScriptManagers。支持主/从呈现模式,以便使用一个ScriptManager声明的脚本可以滚动到另一个ScriptManager进行呈现。
9.支持Web Farm场景...

3
或者将ScriptManager本身包含在一个独立的、每页只出现一次的<form runat="server">中,您觉得如何?像这样:
   <form runat="server">
      <asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true">
      </asp:ScriptManager>
    </form>

对我来说没问题。

附注:您需要确保此表单标记永远不会嵌入到另一个表单中。嵌套的表单无法正常工作。


0

在研究同样的问题时发现了这个:ASP.NET MVC的简单ScriptManager - 在回答这个问题之后编写,供参考。

首先,我采用了一种粗暴的解决方案,即将所有内容都放在主页面中(特别是现在可以从Microsoft的CDN中获取jQuery)- 然后我们将探讨更优化的解决方案选项。


1
虽然看起来很不错,但它似乎没有合并或压缩任何内容。它只允许您在主页面上轻松地仅包含脚本一次。 - frank hadder
@luckyllama - 说得好,问题在于这是一个复杂的问题。我建议最好在构建时而不是运行时进行缩小。组合是一个灰色地带 - 特别是如果每个页面上有不同的脚本组合 - 因为你失去了缓存的好处。压缩可能应该由服务器处理,多个来源是另一个问题,除非建议从两个地方获取相同的脚本,否则我会有问题... - Murph

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接