4

我想将 Bundle 添加到现有的 ASP.NET MVC 4 (.NET 4.5) 网站中,该网站使用:

我尝试遵循这些指示:https ://gist.github.com/jkarsrud/5143239 ,并且在我开始使用捆绑路径之前,CSS 加载良好。

在页面加载时,它会插入样式参考:

<link href="/bundles/marketingcss" rel="stylesheet">

但是会发生 404 错误:

> GET http://localhost:20459/bundles/marketingcss 404 (Not Found) 

这是我在代码中的内容:

网络配置

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/bundles" />

全球.asax

<%@ Application Codebehind="Global.asax.cs" Inherits="MapCom.Global" Language="C#" %>

全球.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.Security;
using System.Web.SessionState;
using Umbraco.Web;

namespace MapCom
{
    public class Global : UmbracoApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            base.OnApplicationStarted(sender, e);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

_Layout.cshtml

@Styles.Render("~/bundles/marketingcss");

BundleConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;

namespace MapCom
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            BundleTable.EnableOptimizations = true;
            ///
            ///Marketing Site CSS Bundle
            ///
            bundles.Add(new StyleBundle("~/bundles/marketingcss")
                .Include("~/plugins/bootstrap/css/bootstrap.min.css")
                .Include("~/css/font-awesome.min.css")
                .Include("~/plugins/parallax-slider/css/parallax-slider.css")
                .Include("~/css/combinedStyles.min.css")
                .Include("~/plugins/ladda-buttons/css/ladda.min.css")
                .Include("~/plugins/ladda-buttons/css/custom-lada-btn.css"));
        }
    }
}

有任何想法吗?

4

3 回答 3

6

在深入研究 Umbraco 之后,我注意到我正在从事的项目正在使用一个类:

 public class ApplicationEventHandler : IApplicationEventHandler

这里有更详细的解释:http: //our.umbraco.org/documentation/Reference/Events/application-startup

但要点是:

为了绑定到 Umbraco 应用程序中的某些事件,您需要在应用程序启动期间进行这些注册。根据您使用的 Umbraco 版本,有多种方法可以连接到应用程序启动。您使用的版本越高,它变得越健壮。

因此,Umbraco 覆盖了一些 ASP.NET 启动方法。

我通过在 ApplicationEventHandler.cs 中添加对 System.Web.Optimization 的引用解决了我的问题,并将我的捆绑注册移动到该类中的此方法:

public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}
于 2014-06-05T14:53:15.077 回答
3

这里唯一对我有用的是将捆绑包的路径添加到以下设置中web.config

我的捆绑代码

BundleTable.Bundles.Add(new ScriptBundle("~/opt/jscripts").Include(
                "~/Scripts/twitterFetcher.js"
                ));
            BundleTable.EnableOptimizations = true;

Umbraco 默认设置

<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />

新设置

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/opt/" />
于 2014-12-04T19:47:50.953 回答
2

尝试以下建议:

1.不要为您的css虚拟路径使用关键字bundles ,只需将其更改为其他内容,并仅将关键字bundles用于您的脚本。像这样:

 bundles.Add(new StyleBundle("~/Content/marketingcss")

请记住,您需要确保如果您在内容文件夹下有一个名为 marketingcss 的文件,您应该将虚拟路径更改为其他内容,因此虚拟路径不应与物理路径重复)

2.在您的 _Layout.cshtml 中使用以下行而不是您的:

 @Styles.Render(BundleTable.Bundles.ResolveBundleUrl("~/Content/marketingcss"))

3.如果上述建议不起作用,请在您的 _Layout.cshtml 中尝试这个:

<link href="@System.Web.Optimization.BundleTable.
               Bundles.ResolveBundleUrl("~/Content/marketingcss")"
               rel="stylesheet"
               type="text/css" /> 

更新

4.刚刚看到我们的一位朋友关于不要将 .min 文件放入您的包中的评论,这是正确的,因此您不能在 budleConfig 类中包含 .min 文件,而只需使用普通文件bootstarp.css代替,bootstrap.min.css并为所有其他文件,当然首先要确保您拥有正常文件,而不是仅仅更改名称。

我希望它有助于修复您的代码

于 2014-06-04T22:50:57.657 回答