2013-07-16 2 views
0

Я продолжаю получать эту ошибку в своем JavaScript независимо от того, какое исправить я пытаюсь. Это почти похоже на то, что $ .connection не распознается, хотя у меня есть все библиотеки SignalR JavaScript в моем _layout. Я получаю следующую ошибку в консоли браузера Chrome: Uncaught TypeError: «Невозможно прочитать свойство« multipleFileHub »неопределенного индекса: 508 (анонимная функция) Индекс: 508 x.event.dispatch jquery-2.0.2.js: 4692 y.handle jquery-2.0.2.js: 4376 «undefined».SignalR Hubs: ошибка времени выполнения JavaScript: невозможно получить свойство «multipleFileHub» свойства неопределенной или нулевой ссылки

Имеет ли значение, что мой Global.asax наследуется от «StsMvcHttpApplication», а не стандартного «System.Web.HttpApplication»? И в моем случае , Я должен поместить «RouteTable.Routes.MapHubs();» в свой метод «RegisterRoutes», а не «Application_Start», поскольку Application_Start не срабатывает достаточно быстро ... он начинает поиск контроллеров, если я помещаю его в приложение начало

Поблагодарите за помощь! ж кода макета, а затем все отдельные части кода:

_layout

@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; 
    }); 

SERVER КОД:

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); 
     } 
    } 
} 

global.asax ROUTING

 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> 
+3

У вас есть jQuery, включенный дважды на странице. Если вы используете MVC4, у вас, вероятно, есть jQuery на странице Layout и снова включайте его на странице SignalR. – davidfowl

+0

Я поднял страницу с помощью Chrome Dev Tools и нашел только одну версию jquery-2.0.2.min.js. Я включил все библиотеки javascript, упомянутые выше. – TheDude

+0

Это единственная причина, по которой я когда-либо видел эту ошибку. Вы можете попробовать удалить страницу макета и посмотреть, можете ли вы заставить ее работать с минимальными сценариями, необходимыми для этой конкретной страницы с помощью signalr. – davidfowl

ответ

3

Оказывается, причиной этого вопроса было потому, что библиотека JQuery был загружен на странице, на второй раз. В макете была использована другая библиотека javascript, в которую была добавлена ​​некорректированная библиотека jquery на странице после первой миниатюрной. Это было трудно найти, поскольку код для вставки другой библиотеки jquery не отображался на странице макета. Во всяком случае, просто подумал, что я позволю всем, кто это прочитает, знать, что проблема ОПРЕДЕЛЕНА связана с библиотекой jquery, добавленной после библиотеки signalR.

David Fowler, из приведенных выше комментариев, был на месте! Благодаря!

Смежные вопросы

 Смежные вопросы