c# - 使用 MVC 5 从 SignalR 中的 Controller 调用 Javascript 方法

标签 c# javascript asp.net-mvc signalr asp.net-mvc-5

我正在尝试将 SignalR 实现到一个简单的 MVC 5 项目中。我已经完成了this tutorial它有效,但我现在尝试从单独的 Controller 调用集线器方法。

我有一个名为Generate.cshtml的 View ,带有此标记和Javascript:

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

        myHub.client.writeMessageToScreen = function(message) {
            $('#messages').append(message);
        };               
    });
</script>

<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />

<ul id="messages" class="round">
</ul>

集线器类是

[HubName("ContosoChatHub")]
public class ContosoChatHub : Hub
{
    public void NewContosoChatMessage(string message)
    {
        Clients.All.NewMessage(message);
    }
}

然后在我的 Controller 中,我想调用 writeMessageToScreen 方法 - 直接调用它,或者通过集线器类调用它。

我读到可以直接调用 Javascript 方法

    public ActionResult Generate()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();

        context.Clients.All.writeMessageToScreen("Test");

        return View();
    }

但这不起作用,并且没有任何内容写入屏幕..它也没有抛出任何错误,它只是没有做..任何事情。

有人知道发生了什么事吗?有没有更好的方法从 Controller 调用集线器方法?

最佳答案

您尚未启动连接 更新:

在你的中心类

public class ContosoChatHub : Hub
{
    public static NewContosoChatMessage(string message)
    {
     var notifyContext = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub >();
        notifyContext.Clients.All.NewMessage(message);
    }
}

然后在你的 Controller 中

public ActionResult Generate()
    {
        ContosoChatHub.NewContosoChatMessage("Test");

        return View();
    }
$(function() {
        var myHub = $.connection.ContosoChatHub;
        $.connection.hub.start();
        myHub.client.writeMessageToScreen = function(message) {
            $('#messages').append(message);
        };               
    });

这应该适合你

关于c# - 使用 MVC 5 从 SignalR 中的 Controller 调用 Javascript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834047/

相关文章:

c# - 如何在同一行显示结果

c# - 将二进制文件中的类型反序列化为不同应用程序中的不同命名空间(C# .NET)

javascript - 尝试制作一个导航栏,但出了点问题

javascript - 根据属性将多个对象求和到一个数组

c# - ? : condition in Razor C#

html - 如何覆盖 MVC Razor 中的@section

c# - 如何用html代码替换gridview?

c# - 在 NUnit 中,如何为结构的属性比较指定容差?

c# - 连接到服务器 vs 连接到数据库

javascript - 为什么 "i"不等于 "i̇"?