C# 使用MVC5从信号器中的控制器调用Javascript方法
我正在尝试将SignalR实现到一个简单的MVC5项目中。我已经完成了,它也可以工作了,但是我现在尝试从一个单独的控制器调用一个hub方法 我有一个名为Generate.cshtml的视图,带有以下标记和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
<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);
};
});