简体   繁体   English

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

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

I'm trying to implement SignalR into a simple MVC 5 project. 我正在尝试将SignalR实施到一个简单的MVC 5项目中。 I've worked through this tutorial and it works, but I'm now trying to call a hub method from a separate controller. 我已经完成了本教程,并且可以正常工作,但是现在我正尝试从单独的控制器调用集线器方法。

I have a view called Generate.cshtml, with this markup and Javascript: 我有一个名为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>

the hub class is 枢纽类是

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

and then in my controller, I want to call the writeMessageToScreen method - either calling it directly, or via the hub class. 然后在我的控制器中,我想调用writeMessageToScreen方法-直接调用它,或通过集线器类调用它。

I've read that I can call the Javascript method directly 我读到可以直接调用Javascript方法

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

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

        return View();
    }

But this isn't working and nothing is written to screen.. It isn't throwing any errors either, it just isn't doing.. anything. 但是,这不起作用,什么也没写到屏幕上。它也没有抛出任何错误,只是没有做任何事情。

Does anyone have any ideas what's going on? 有谁知道发生了什么事吗? Is there a better way to call Hub methods from a Controller? 有没有更好的方法可以从Controller调用Hub方法?

You didn't start the connection Update: 您没有启动连接更新:

In you hub class 在您的中心班

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

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

This should work for you 这应该为你工作

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

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