C# 使用MVC5从信号器中的控制器调用Javascript方法

C# 使用MVC5从信号器中的控制器调用Javascript方法,c#,javascript,asp.net-mvc,signalr,asp.net-mvc-5,C#,Javascript,Asp.net Mvc,Signalr,Asp.net Mvc 5,我正在尝试将SignalR实现到一个简单的MVC5项目中。我已经完成了,它也可以工作了,但是我现在尝试从一个单独的控制器调用一个hub方法 我有一个名为Generate.cshtml的视图,带有以下标记和Javascript: <script type="text/javascript"> $(function() { var myHub = $.connection.ContosoChatHub; myHub.client.writ

我正在尝试将SignalR实现到一个简单的MVC5项目中。我已经完成了,它也可以工作了,但是我现在尝试从一个单独的控制器调用一个hub方法

我有一个名为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>
然后在我的控制器中,我想调用WriteMessageOscreen方法——要么直接调用,要么通过hub类调用

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

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

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

        return View();
    }
public ActionResult Generate()
{
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.writeMessageToScreen(“测试”);
返回视图();
}
但这不起作用,没有任何内容写入屏幕。。它也没有抛出任何错误,只是没有做。。什么都行


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

您没有启动连接 更新:

在你的中心班

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

这应该适用于您

我没有看到对
$.connection.hub.start()
的任何调用。有吗?我添加了$.connection.hub.start().done(函数(){myHub.server.runMe();});这在我的ConosotoChatHub类中执行了一个“runMe()”函数,很好,这一切似乎都正常。但是我的控制器类中的方法仍然不起作用,它仍然不执行WriteMessageOscreen方法。我在hub类中得到一个错误,即“无法在静态上下文中访问非静态属性“Clients”。我认为我不能使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);
        };               
    });