我正在尝试将 SignalR 实现到一个简单的 MVC 5 项目中。我已经完成了this tutorial它有效,但我现在尝试从单独的 Controller 调用集线器方法。
我有一个名为Generate.cshtml的 View ,带有此标记和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);
}
}
然后在我的 Controller 中,我想调用 writeMessageToScreen 方法 - 直接调用它,或者通过集线器类调用它。
我读到可以直接调用 Javascript 方法
public ActionResult Generate()
{
var context = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();
context.Clients.All.writeMessageToScreen("Test");
return View();
}
但这不起作用,并且没有任何内容写入屏幕..它也没有抛出任何错误,它只是没有做..任何事情。
有人知道发生了什么事吗?有没有更好的方法从 Controller 调用集线器方法?
最佳答案
您尚未启动连接 更新:
在你的中心类
public class ContosoChatHub : Hub
{
public static NewContosoChatMessage(string message)
{
var notifyContext = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub >();
notifyContext.Clients.All.NewMessage(message);
}
}
然后在你的 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);
};
});
这应该适合你
关于c# - 使用 MVC 5 从 SignalR 中的 Controller 调用 Javascript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834047/