在捆绑js时未加载SignalR

时间:2015-05-12 04:36:52

标签: c# asp.net signalr bundling-and-minification

我一直在我的asp.net应用程序中使用Bundling and Minification概念。我在global.asax

中有以下代码
void Application_Start(object sender, EventArgs e)
    {
        System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.ScriptBundle("~/bundle/js")
                      .Include("~/Scripts/jquery-1.8.2.js", 
                               "~/Scripts/jquery-ui-1.8.24.js",
                               "~/Scripts/jquery.signalR-2.2.0.js"));
        System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.ScriptBundle("~/bundle/js1")
                     .Include("~/Content/Scripts/VerbaTrack.js",
                              "~/Content/Scripts/Helper.js"));
        System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.StyleBundle("~/bundle/css")
             .Include("~/Content/Css/Demo.css",
                      "~/Content/Css/Styles.css"));
    }

我正在master page以下列方式引用这些文件

<head runat="server">
<link rel="shortcut icon" type="image/x-icon" href="Content/Images/VerbaTrack.ico"/>
<title>

</title>    
<asp:placeholder runat="server">  
     <%= System.Web.Optimization.Scripts.Render("~/bundle/js") %>
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=drawing,places"></script>    
     <%= System.Web.Optimization.Scripts.Render("~/bundle/js1") %>
     <%= System.Web.Optimization.Styles.Render("~/bundle/css") %>   
     <script src="signalr/hubs"></script>               
</asp:placeholder>

正如您所见,我在引用signalr/hubs

后立即引用jquery.signalR-2.2.0.js

但仍然是抛出以下错误

Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs.

为什么会这样?

1 个答案:

答案 0 :(得分:1)

如果脚本没有加载正确的订单(请检查页面源),您可以使用它来确保订单是捆绑包中提供的:

/// <summary>
/// Respect the order of the scripts added
/// </summary>
public class NonOrderingBundleOrderer : IBundleOrderer
{
    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
    {
        return files;
    }
}

然后将包分配给变量,如:

var scripts = new ScriptBundle("~/bundle/js")
        .Include("~/Scripts/jquery-1.8.2.js")
        .Include("~/Scripts/jquery-ui-1.8.24.js")
        .Include("/Scripts/jquery.signalR-2.2.0.js");

然后附加NonOrderingBundleOrderer并将捆绑包添加到捆绑集合中:

scripts.Orderer = new NonOrderingBundleOrderer();
BundleTable.Bundles.Add(scripts);