繁体   English   中英

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

[英]Calling Javascript method from Controller in SignalR with MVC 5

我正在尝试将SignalR实施到一个简单的MVC 5项目中。 我已经完成了本教程,并且可以正常工作,但是现在我正尝试从单独的控制器调用集线器方法。

我有一个名为Generate.cshtml的视图,带有此标记和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);
    }
}

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

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

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

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

        return View();
    }

但是,这不起作用,什么也没写到屏幕上。它也没有抛出任何错误,只是没有做任何事情。

有谁知道发生了什么事吗? 有没有更好的方法可以从Controller调用Hub方法?

您没有启动连接更新:

在您的中心班

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

然后在你的控制器

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

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

这应该为你工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM