【问题标题】:SignalR 2.2.0 MVC 4 error client undefinedSignalR 2.2.0 MVC 4 错误客户端未定义
【发布时间】:2015-08-16 09:11:33
【问题描述】:

几乎 12 小时没有成功,我已经在 Web Project 中尝试过这段代码并且它有效,但是当与我的 MVC 应用程序集成时它给了我错误

GET http://localhost:50843/signalr/Hubs 

DashBoard:553 Uncaught TypeError: Cannot read property 'client' of undefined(anonymous function) @ DashBoard:553

此错误通常发生在找不到集线器脚本时我已经尝试了很多修复但没有运气这是我的代码。

项目结构

参考文献

ChatHub.cs (方法实现我省略了)

 using System;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    using SignalRTest;
    using System.Threading.Tasks;
    using System.Linq;
    using System.Web.Security;
    
    namespace SignalRChat
        
    {
        public class ChatHub : Hub
        {
        }
    }

Startup.cs

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

_Layout.cshtml

这是无法调用客户端对象的问题区域。任何帮助将不胜感激。

提前致谢。

【问题讨论】:

  • 你成功了吗?祝你好运!

标签: c# model-view-controller signalr


【解决方案1】:

在客户端代码中,您应该同时包含jquery.min.jsjquery.signalR.min.js(根据我在您的cshtml 中看到的内容,您只包含jquery.signalR)。

尝试同时包含两者,看看是否有效!

祝你好运!

编辑:您应该将整个客户端代码放入 $(function(){ }); 来自官方文档的示例:

<script type="text/javascript">
        $(function () {
            var chat = $.connection.chatHub;

            chat.client.broadcastMessage = function (name, message) {

                var encodedName = $('<div />').text(name).html();
                var encodedMsg = $('<div />').text(message).html();

                $('#discussion').append('<li><strong>' + encodedName
                    + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
            };

            $('#displayname').val(prompt('Enter your name:', ''));

            $('#message').focus();

            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {

                    chat.server.send($('#displayname').val(), $('#message').val());

                    $('#message').val('').focus();
                });
            });
        });
    </script>

注意客户端代码是如何包装在 jQuery 函数中的。

祝你好运!

【讨论】:

  • 感谢您的回复,但如果您可以在我的 cshtml 页面上看到,我已经包含了对 @Scripts.Render("~/bundles/jquery") 的引用,这会自动为我带来 JQuery 当前版本的 JQuery我有的是 1.9.1
  • 尝试手动添加这个参考,看看它是否有效。您得到的错误似乎是由于缺少参考
  • 引用脚本的顺序也很重要。
  • 尝试包括手动但没有运气:( ,脚本的顺序与我分享的相同。
  • 尝试创建一个没有任何 Razor 的简单 html 文件,手动包含脚本,看看它是否有效。
【解决方案2】:

我实际上在 Startup.cs 文件中应用了一个断点,以查看它是否正在调用方法 MapSignalR(),因为这是负责动态调用中心脚本的方法。令我惊讶的是,这个方法没有被调用。

因此,经过更多努力,我意识到我缺少这些引用 Microsoft.Owin.Host.SystemWebMicrosoft.Owin.Security,它们负责通过 Owin 调用 Startup 类方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2016-05-17
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多