对 SignalR 集线器方法的 Javascript 调用不返回值

标签 javascript c# asp.net webforms signalr

我正在为我的网站编写一个聊天室页面,但遇到了一些问题。我想确保聊天室参与者使用的名称是唯一的。集线器类本身包含一个 List<> 已经参与聊天的参与者,因此我向该类添加了一个方法来检查是否存在已在使用的名称:

    public bool UserNameInUse(string name)
    {
        UserDetail item = ConnectedUsers.FirstOrDefault(x => x.UserName == name);
        return (item.ConnectionId == null);
    }

在 Javascript 方面,我尝试调用 hub 方法来检查名称是否已在开始连接之前使用,如下所示:

   $("#btnStartChat").click(function () {

    var name = $("#txtNickName").val();
    if (name.length > 0) {
        var status = chatHub.server.userNameInUse(name);
        alert(status);
        if (status!=1)
            chatHub.server.connect(name);
        else
            alert("The name you chose is already in use.  Try a different one, please.");
    }
    else {
        alert("Please enter a name to use for this chat.");
    }
});

如您所见,我对调用进行了检测以查看返回的内容。但不是从集线器方法调用中获取值 (这 确实 触发了,因为我在 Debug模式下在 Visual Studio 中测试了它),这是我从警告框中得到的:

screenshot of what the call returns

我已经尝试将返回类型更改为字符串并发回文本,更改为 int 并返回数字,但每次运行代码时我都会得到相同的结果。谁能帮我理解为什么调用没有返回值?

最佳答案

您需要注册回调函数以接收服务器响应,例如

chatHub.server.UserNameInUse(name).done(function (isInUse) {
    if (isInUse) {
       // Server returned true
    } else {
       // Server returned false
    }
}).fail(function (error) {
    console.log('Invocation of UserNameInUsefailed. Error: ' + error);
});

有关更多信息,请在此处查看 SignalR 文档

How to call server methods from the client

关于对 SignalR 集线器方法的 Javascript 调用不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40615504/

相关文章:

大纲

c# - 继承接口(interface)方法的重新实现

c# - 如何在数组.NET驱动程序中的项目属性上创建MongoDB MultiKey索引

c# - 在我的控制台应用程序中调用 Entity Framework 类

c# - 如何从 ASP.NET 注销 siteminder session

c# - 如何从 URL 中删除根文件夹名称?

javascript - 使用 javascript 预览 HTML 或任何代码

javascript - 谷歌自定义搜索框结果显示在同一页面或标签上,而不是在不同的页面或标签上

javascript - 我可以在模式路径级别和模式级别建立 Mongoose 索引吗?

c# - 制作一组图片框,每个都有不同的图像