javascript - 使用 SignalR 从 C# 调用 JS 方法?

标签 javascript c# asp.net signalr dom-events

我知道有很多与 SignalR 有关的示例,但我似乎无法让它工作,我希望你们中的一个人能够(完整地)展示网页(线程循环所以我们可以看到它一遍又一遍地发生)可以在页面上调用 JS 方法并更改文本标签或创建弹出窗口,或者只是让我们看到方法执行的东西?

我会给你我的代码,也许你可以指出错误,但是没有客户端先发出请求的服务器->客户端调用的任何基本示例都将是惊人的!

中心:

[HubName("chat")]
public class Chat : Hub
{
    public void Send(string message)
    {
        // Call the addMessage method on all clients?
        Clients.addMessage(message);
    }
}

调用(线程)方法:

private void DoIt()
{
    int i = 0;
    while (true)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<Chat>();
        hubContext.Clients.addMessage("Doing it... " + i);
        i++;
        Thread.Sleep(500);
    }
}

JS:

$(function () {
    // Proxy created on the fly
    var chat = $.connection.chat;

    // Declare a function on the chat hub so the server can invoke it
    chat.addMessage = function (message) {
        confirm("Are you having fun?");
        confirm(message);
    };

    // Start the connection
    $.connection.hub.start();        
});

最佳答案

我遇到的问题是一个自动关闭的 JS 导入标签,它停止了正在运行的页面上的所有 JS ...

对于遇到相同问题的其他人,这是我在服务器上将数据推送到所有客户端而无需客户端任何提示的工作示例:

Javascript:

$(function () {
    // Proxy created on the fly
    var chat = $.connection.chat;

    // Declare a function so the hub can invoke it
    chat.addMessage = function (message) {
        document.getElementById('lblQuestion').innerHTML = message;
    };

    // Start the connection
    $.connection.hub.start();
});

HTML:

<h2 id="lblQuestion" runat="server">Please wait for a question...</h2>

中心:

[HubName("chat")]
public class Chat : Hub
{
    public void Send(string message)
    {
        // Call the addMessage method on all clients
        Clients.addMessage(message);
    }

    public void Broadcast(string message)
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
        context.Clients.addMessage(message);
    }
}

给客户打电话:

private void DoIt()
{
    int i = 0;
    while (true)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<Chat>();
        hubContext.Clients.addMessage("Doing it... " + i);
        i++;
        Thread.Sleep(500);
    }
}

对 DoIt() 的线程调用:

    var thread = new Thread(new ThreadStart(DoIt));

    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();

关于javascript - 使用 SignalR 从 C# 调用 JS 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825771/

相关文章:

c# - 什么是 C# 中的内部设置属性?

css - 在 (':' :(value)"declaration. css 全局变量中的冒号 "(property)"之前缺少属性名称)

Javascript 警报在 IE 中提示两次

c# - 如何在传递时修改 DbContext 基本构造函数参数?

javascript - 使用 javascript 将多个用户表单输入存储在关联数组中

javascript - antd React组件库 "Collapse"的覆盖样式

javascript - 使用javascript更改文本框文本颜色

c# - 使用 C# 更新或删除 CSV 中的一行

c# - 编译器错误消息 : CS1513: } expected

javascript - 为什么这个正则表达式会导致无限循环?