2013-03-02 126 views
0

我试图学习signalr和这个错误,我创建它。无法读取属性'chatHub'的未定义SignalR Hub

无法读取未定义的属性'chatHub'。

$(document).ready(function() { 
     var chat = $.connection.chatHub; 
     $.connection.hub.start(); 
}); 

和轮毂的文件是:

namespace TestSignalR.Web.Hubs 
{ 
public class ChatHub : Microsoft.AspNet.SignalR.Hub 
{ 
    public void Send(string msg) 
    { 
     ChatData chat = new ChatData(); 
     chat.Msg = msg; 
     chat.UserName = HttpContext.Current.User.Identity.Name; 
     chat.Date = "♣ at " + DateTime.Now.ToString("hh:mm tt"); 
     Clients.All.broadCastMessage(chat); 
    } 
} 
} 
+5

您能分享您如何解决您的问题吗? – 2013-05-31 21:44:17

+0

此问题通常是由于'〜/ signalr/hubs'处的自动生成的集线器JavaScript代理缺少或无效的脚本引用。 请确保Hub路由在应用程序中的任何其他路由之前注册。 – Yehia 2014-09-27 16:29:13

回答

13

可能缺少文档的<HEAD>这一行:

<script src="/signalr/hubs" type="text/javascript"></script> 

检查你也有

<script src="/Scripts/jquery.signalR-1.0.0.js"></script> 

,并检查,使用Fiddler或Chrome Deve loper两个文件正在加载的工具,并且/ hubs文件包含您期望它包含的有关中心定义的内容。

+0

我做了这个,但也有同样的错误 – Yehia 2013-03-02 19:46:23

+0

增加了一些其他的建议来回答 – 2013-03-02 19:51:11

+0

我已经解决了这个错误,谢谢你。☺ – Yehia 2013-03-02 19:57:48

2

对于所有那些有正确的DLL,但即使解决方案不起作用的解决方案是,功能名称套管得到改变。

就像我的类名是TestAHub

但它更改为testAHub。

您实际上需要打开此js“/ signalr/hubs”来检查名称。

7

由于MVC试图提供帮助并呈现jquery包,我似乎总是遇到这个问题。然后当你尝试在你的视图中添加signalr时,它会失败,因为你必须事先添加jquery,但是jQuery会被MVC bundle重新加载。这混淆了它似乎会导致错误的东西。你可能都会有这样的节主布局页:

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

所以,如果你把你的脚本中的脚本段应该做signalr快乐,做工精细。

@section scripts { 
    <!--Reference the SignalR library. --> 
    <script src="Scripts/jquery.signalR-2.0.2.min.js"></script> 
    <!--Reference the autogenerated SignalR hub script. --> 
    <script src="signalr/hubs"></script> 
    <!--Add script to update the page and send messages.--> 
    <script type="text/javascript"> 
     $(function() { 
      // Declare a proxy to reference the hub. 
      var chat = $.connection.chatHub; 
      // Create a function that the hub can call to broadcast messages. 
      chat.client.broadcastMessage = function (name, message) { 
       // Html encode display name and message. 
       var encodedName = $('<div />').text(name).html(); 
       var encodedMsg = $('<div />').text(message).html(); 
       // Add the message to the page. 
       $('#discussion').append('<li><strong>' + encodedName 
        + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
      }; 
      // Get the user name and store it to prepend to messages. 
      $('#displayname').val(prompt('Enter your name:', '')); 
      // Set initial focus to message input box. 
      $('#message').focus(); 
      // Start the connection. 
      $.connection.hub.start().done(function() { 
       $('#sendmessage').click(function() { 
        // Call the Send method on the hub. 
        chat.server.send($('#displayname').val(), $('#message').val()); 
        // Clear text box and reset focus for next comment. 
        $('#message').val('').focus(); 
       }); 
      }); 
     }); 
    </script> 
} 
+2

您值得+1。但是,不明白,为什么signalR脚本不能在没有脚本部分的情况下工作? – Shell 2015-10-12 03:20:19

0

我遇到了Firefox的问题,在我的情况下,我使用的是https,在开发中它不存在,所以我得到了错误,因为https的例外没有注册。 只需访问信号服务器并添加。

相关问题