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