$ .connection未定义+ signalR 0.5.3 + MVC4

一直在努力解决这个错误贴两个小时..

TypeError: $.connection is undefined [Break On This Error] var chatHubClient = $.connection.chatHub; 

这是我的Chat.cs(在控制器文件夹中 – 我猜这是我做错了,但我找不到任何关于放置它或如何路由它的文档)

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using SignalR.Hubs; namespace SingalrTest.Controllers { public class Chat { private readonly static Lazy _instance = new Lazy(() => new Chat()); public static Chat Instance { get { return _instance.Value; } } } [HubName("chatHub")] public class ChatHub : Hub { private readonly int TimeoutInSeconds = 30; private readonly Chat _chat; public ChatHub() : this(Chat.Instance) { } private ChatHub(Chat chat) { this._chat = chat; } public void Join(string channelName) { System.Diagnostics.Debug.WriteLine("Someone joined " + channelName); } } } 

最后,..可能_Layout.cs.html

     @ViewBag.Title - My ASP.NET MVC Application   @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") @Scripts.Render("~/Scripts/jquery-1.8.1.js") @Scripts.Render("~/Scripts/jquery.signalR-0.5.3.js") @Scripts.Render("~/signalr/hubs")  $(document).ready(function () { // var chatHubClient = jQuery.connection.chatHub; var chatHubClient = $.connection.chatHub; $.connection.chatHub.start(function () { chatHubClient.join('TEST'); }); });    ...   

如果我访问/ signalr / hubs,我可以看到源是正确生成的。 那么我想念的是什么?

你可能已经开始……

但这是解决方案。

你在head标签中以正确的顺序拥有所有脚本。 但是Visual Studio模板中的_Layout.cshtml在body标记的末尾有以下行。

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

这个bundle有jQuery库,它在加载时会覆盖$ object。 因此,SignalR在此设置上的任何“内容”现在都会被覆盖,无法访问。

只需在页面中使用以下内容即可

 @section scripts { @* Load your scripts here. (and remove jQuery, coz it's already loaded) *@ } 

希望这可以帮助。

根据这一点 ,对于0.5.3版,您必须更改连接语法:

 var connection = $.hubConnection(); 

或将流量引导至辅助服务器

 var connection = $.hubConnection("http://localhost:58416/"); 

连接到集线器:

 var hub = connection.createProxy('your_hub_name'); 

在发送和接收消息时还有一些更改

希望这有帮助