信号集线器:JavaScript运行时错误:无法获取属性';多功能集线器';指未定义的或空的引用

信号集线器:JavaScript运行时错误:无法获取属性';多功能集线器';指未定义的或空的引用,javascript,jquery,asp.net,signalr,Javascript,Jquery,Asp.net,Signalr,无论我尝试什么修复,我的JavaScript中总是会出现这个错误。即使我的_布局中有所有的signarjavascript库,也几乎没有识别$.connection。我在Chrome浏览器控制台中遇到以下错误:uncaughttypeerror:“无法读取未定义索引的属性'multipleFileHub':508 (匿名函数)索引:508 x、 event.dispatch jquery-2.0.2.js:4692 y、 处理jquery-2.0.2.js:4376“未定义的” 我的Global

无论我尝试什么修复,我的JavaScript中总是会出现这个错误。即使我的_布局中有所有的signarjavascript库,也几乎没有识别$.connection。我在Chrome浏览器控制台中遇到以下错误:uncaughttypeerror:“无法读取未定义索引的属性'multipleFileHub':508 (匿名函数)索引:508 x、 event.dispatch jquery-2.0.2.js:4692 y、 处理jquery-2.0.2.js:4376“未定义的”

我的Global.asax继承自“StsMvcHttpApplication”而不是标准的“System.Web.HttpApplication”,这有关系吗?在我的例子中,我必须将“RouteTable.Routes.MapHubs()放入其中;“在我的“RegisterRoutes”方法中,而不是“Application_Start”,因为Application_Start的启动速度不够快……如果我将其放入app Start中,它会开始寻找控制器

非常感谢您的帮助!我将首先显示布局代码,然后显示所有单独的代码:

_布局

@section head
{
    @Scripts.Render("~/Scripts/Libs/jquery-2.0.2.min.js")
    @Scripts.Render("~/Scripts/Libs/jquery-ui-1.10.3.min.js")
    @Scripts.Render("~/Scripts/Libs/jquery.validate.min.js")
    @Scripts.Render("~/Scripts/Libs/jquery.validate.unobtrusive.min.js")
    @Scripts.Render("~/Scripts/Libs/modernizr-2.6.2.js")
    @Scripts.Render("~/Scripts/Libs/modernizr.custom.blobconstructor.js")
    @Scripts.Render("~/Scripts/SidebarMenu.js")
    @Scripts.Render("~/Scripts/BC_Common.js")
    @Scripts.Render("~/Scripts/scene.layoutservice.js")
    @Scripts.Render("~/Scripts/scene.dataservice.js")
    @Scripts.Render("~/Scripts/jquery.signalR-1.1.2.min.js")
    @Scripts.Render("~/signalr/hubs")
    @Scripts.Render("~/Scripts/scene.startup.js")
}
INDEX.CSHTML

        $('#dBtn').click(function () {
        var docIds = sceneLayoutService.getSelection();
        if (docIds.length === 0) {
            alert("you need to select one");
            return false;
        } else {
            var docIdsParam = jQuery.param(docIds.map(function (value) {
                return { "name": "docIds", "value": value };
            }));
            // Proxy created on the fly
            var test_connection = $.connection.multipleFileHub;

            // Start the connection
            $.connection.hub.start().done(function() {
                test_connection.server.send("test");
            });
        }
        return true;
    });
服务器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace Portal.Web.Hubs
{
    [HubName("multipleFileHub")]
    public class multipleFileHub : Hub
    {
        public void Send(string message)
        {
            // Call the addMessage method on all clients
            Clients.All.addMessage(message);
        }
    }
}
全局.ASAX路由

        public static void RegisterRoutes(RouteCollection routes)
    {
        RouteTable.Routes.MapHubs();

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
        routes.Ignore("{*allpng}", new { allpng = @".*\.png(/.*)?" });
        routes.Ignore("{*allgif}", new { allgif = @".*\.gif(/.*)?" });
        routes.Ignore("{*alljpg}", new { alljpg = @".*\.jpg(/.*)?" });

        routes.MapRoute(
        "Error", // Route name
        "Error/{action}/{id}", // URL with parameters
        new {controller = "Error", action = "Index", id = UrlParameter.Optional });

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Landing", id = UrlParameter.Optional } // Parameter defaults
        );

    }
页面上的所有JAVASCRIPT引用

<script src="/ConnectPortal/Scripts/Libs/jquery-2.0.2.min.js"></script>

<script src="/ConnectPortal/Scripts/Libs/jquery-ui-1.10.3.min.js"></script>

<script src="/ConnectPortal/Scripts/Libs/jquery.validate.min.js"></script>

<script src="/ConnectPortal/Scripts/Libs/jquery.validate.unobtrusive.min.js"></script>

<script src="/ConnectPortal/Scripts/Libs/modernizr-2.6.2.js"></script>

<script src="/ConnectPortal/Scripts/Libs/modernizr.custom.blobconstructor.js"></script>

<script src="/ConnectPortal/Scripts/SidebarMenu.js"></script>

<script src="/ConnectPortal/Scripts/BC_Common.js"></script>

<script src="/ConnectPortal/Scripts/scene.layoutservice.js"></script>

<script src="/ConnectPortal/Scripts/scene.dataservice.js"></script>

<script src="/ConnectPortal/Scripts/jquery.signalR-1.1.2.min.js"></script>

<script src="/ConnectPortal/signalr/hubs"></script>

<script src="/ConnectPortal/Scripts/scene.startup.js"></script>

问题的原因是,jquery库第二次加载到页面上。布局中使用了另一个javascript库,在第一次缩小的jquery库之后在页面上插入未缩小的jquery库。很难找到这一点,因为代码需要插入另一个jquery库rary没有显示在布局页面上。无论如何,我只是想让所有读过这篇文章的人都知道,这个问题肯定与在signar库之后添加的jquery库有关


大卫·福勒(David Fowler)从上面的评论中说得很对!谢谢!

事实证明,这个问题的原因是因为jquery库第二次加载到页面上。布局中使用了另一个javascript库,在第一次缩小后在页面上插入非缩小的jquery库。这是错误的因为插入另一个jquery库的代码没有显示在布局页面上,所以我想我应该让所有读过这篇文章的人知道,这个问题肯定与在signer库之后添加的jquery库有关


大卫·福勒(David Fowler),从上面的评论来看,非常正确!谢谢!

你在页面上已经包含了两次jQuery。如果你使用MVC4,那么你可能在布局页面上包含了jQuery,并再次将其包含在你的信号器页面中。我使用Chrome开发工具打开页面,发现只有一个版本的jQuery-2.0.2.min.js。我已经包含了所有的jQuery-2.0.2.min.js上面引用的vascript库。这是我看到该错误的唯一原因。您可以尝试删除布局页面,并查看是否可以使用signalr使用该特定页面所需的最低脚本。如果您在使用的任何浏览器中打开控制台,是否会看到任何脚本/解析错误?任何404或其他错误网络面板中出现ng?我在控制台中遇到此错误:“UncaughtTypeError:无法读取未定义的属性'multipleFileHub'“页面上包含了两次jQuery。如果您使用的是MVC4,那么您可能在布局页面上有jQuery,并将其再次包含在您的SignalR页面中。我使用Chrome开发工具调出该页面,发现只有一个版本的jQuery-2.0.2.min.js。我已经包括了上面提到的所有javascript库。这是我看到这个错误的唯一原因。您可以尝试删除布局页面,并查看是否可以使用signalr使用该特定页面所需的最少脚本。如果在您使用的任何浏览器中打开控制台,是否会看到任何脚本/解析错误?任何404或网络面板中的任何内容?我在控制台中收到此错误:“UncaughtTypeError:无法读取未定义的属性'multipleFileHub'”