如果在ASP.NET MVC4中使用绑定和缩小,如何创建清单



ASP.NET MVC4应用程序使用MVC4构建集绑定和缩小。应用程序也应该在脱机状态下工作。

我尝试使用下面的代码创建清单,但这不起作用,因为v=参数将更改如果源代码发生更改。如果使用绑定和缩小,如何在不手动更改绑定查询字符串参数的情况下创建清单?

<!DOCTYPE html>
<html manifest="~/Sale/Manifest">
<head>
    @Erp.Helpers.Bundles.Render("~/css/pos", new { media = "screen" })
    @Erp.Helpers.Bundles.Render("~/css/receipt", new { media = "print" })
    @Scripts.Render("~/pos.js")
</head>

控制器:

public ContentResult Manifest()
        {
            return new ContentResult()
            {
                Content = @"CACHE MANIFEST
CACHE:
pos?v=esdw2223023094323
css/pos?v=ewe3334324r33432343
css/receipt?v=w333543334324r33432343
NETWORK:
*
"
   };
}

C#优化捆绑包和HTML5缓存清单包含类似的问题,但没有答案。

更新

我尝试了答案,但在铬控制台中出现错误

Application Cache Error event: Resource fetch failed (404) http://localhost:52216/erp/Sale/pos.js 

应用程序正在使用运行

        BundleTable.EnableOptimizations = true;

并在调试模式下,从VSE 2013按F5进行Web

我使用在答案中尝试了建议

public class SaleController : ControllerBase
{
    public ContentResult Manifest()
    {
        return new ContentResult()
        {
            Content = string.Format(@"CACHE MANIFEST
CACHE:
   {0}
   {1}
   {2}
", 
Scripts.Url("pos.js"),  // tried also Scripts.Url("pos")
Styles.Url("css/pos"),
Styles.Url("css/receipt")),

在控制器中。

浏览器中的视图源显示

<html manifest="/erp/Sale/Manifest">
<head>
  <link href="/erp/css/pos?v=sN8iz_u3gRGE6MQKGq6KocU-SUIUMcQxKVuESa_L2l41" rel="stylesheet" media="screen"/>
    <link href="/erp/css/receipt?v=C6qCUe6W1VM6yxNe-RgZRY9R0Gws1vU0lMuoKIn1uVE1" rel="stylesheet" media="print"/>
    <script src="/erp/pos.js?v=a-TsureIIlzxwhaItWMV7Ajfw-YXE3x6hUld3cxwAqI1"></script>

生成的清单包含

CACHE MANIFEST
CACHE:
/erp/Sale/pos.js
/erp/Sale/css/pos
/erp/Sale/css/receipt

如何解决此问题?看起来生成了无效的URL以显示:

  1. 已添加销售目录
  2. 查询字符串不存在

System.Web.Optimization中的Styles和Scripts对象上有一些方法,这些方法将为您提供资源的URL。

您可以调用Scripts.Url(string)来为您提供脚本文件的URL,并附上散列。您也可以调用Styles.Url(string),为您提供样式表的URL,以及散列。

using System.Web.Optimization;
using System.Web.Mvc;
namespace StackOverflow.Controllers
{
    public class StackOverflowController : Controller
    {
        public ContentResult Manifest()
        {
            return new ContentResult()
            {
                Content = string.Format( 
@"CACHE MANIFEST
CACHE:
{0}
{1}
{2}
NETWORK:
*
",
 Scripts.Url("~/pos.js"),
 Styles.Url("~/css/pos"),
 Styles.Url("~/css/receipt"))
            };
        }
    }
}

只有在使用web.config文件中指定的<compilation debug="false" />运行站点时,才会添加缓存破坏哈希。

Scripts.Url为您提供捆绑包的Url,而不呈现脚本标记。这能回答你的问题吗?

使用debug="true"运行时,可以使用Scripts.RenderFormatStyles.RenderFormat来呈现文件的完整列表,使用debug="false"运行时,只能使用缩小版本。

这里有一个例子:

    public ActionResult AppManifest()
    {
        string cacheFiles = "";
        cacheFiles = Scripts.RenderFormat("{0}",
            "~/bundles/jquery",
            "~/bundles/jqueryval",
            "~/bundles/bootstrap").ToString();
        cacheFiles += Styles.RenderFormat("{0}",
            "~/Content/css");
        string manifest = String.Format(@"CACHE MANIFEST
  CACHE:
  {0}", cacheFiles);
        return Content(manifest, "text/cache-manifest");
    }

相关内容

  • 没有找到相关文章

最新更新