在SignalR中使用MVC 5从控制器调用Javascript方法

本文关键字:控制器 调用 Javascript 方法 MVC SignalR | 更新日期: 2023-09-27 18:04:45

我试图实现SignalR到一个简单的MVC 5项目。我已经完成了本教程,它可以工作,但我现在试图从一个单独的控制器调用hub方法。

我有一个名为Generate的视图。

<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>

hub类是

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

,然后在我的控制器中,我想调用writeMessageToScreen方法-要么直接调用它,要么通过hub类。

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

    public ActionResult Generate()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();
        context.Clients.All.writeMessageToScreen("Test");
        return View();
    }

但是这不起作用,没有任何内容写入screen..它也没有抛出任何错误,只是没有做…任何东西。

有谁知道是怎么回事吗?是否有更好的方法从控制器调用Hub方法?

在SignalR中使用MVC 5从控制器调用Javascript方法

您没有开始连接更新:

In your hub class

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

then in your 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);
        };               
    });