我正在做一个MVC4网络应用程序,并决定使用signalr,只有一件事我不明白,我可能做错了...
我有一个页面(Home),其中一个ActionLink调用HomeController。 在控制器中我有这个:
的HomeController:
public class HomeController : Controller
{
private IHubContext context;
public HomeController()
{
context = GlobalHost.ConnectionManager.GetHubContext<HomeHub>();
}
...
public ActionResult Scan()
{
context.Clients.All.StartedScanning();
}
}
HomeHub:
public class HomeHub : Hub
{
public void StartedScanning()
{
Clients.All.setStatusMessage("Scanning started...");
}
}
Index.cshtml
...
@Html.ActionLink("Scan for media", "scan", null, new
{
@class = "scanActionLink"
})
...
@section scripts
{
<script src="~/Scripts/jquery.signalR-1.1.2.js"></script>
<script src="~/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
var home = $.connection.homeHub;
home.client.setStatusMessage = function (message) {
alert(message);
}
// Start the connection.
$.connection.hub.start().done(function () {
});
})
</script>
}
实际上代码正在执行,但只能在其他窗口中执行,而不能在主程序中执行。这是正常的吗?
我希望我已经足够清楚了。
感谢。
答案 0 :(得分:0)
单击ActionLink,即表示您正在重新加载页面。 SignalR尚未(重新)加载到新页面的上下文中,因此服务器不会向其发送通知。您可能希望尝试将StartedScanning请求作为AJAX请求,而不是导航离开当前页面。