MVC4& SignalR仅在其他窗口中执行

时间:2013-07-22 13:00:42

标签: asp.net-mvc-4 signalr signalr-hub

我正在做一个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>
}

实际上代码正在执行,但只能在其他窗口中执行,而不能在主程序中执行。这是正常的吗?

我希望我已经足够清楚了。

感谢。

1 个答案:

答案 0 :(得分:0)

单击ActionLink,即表示您正在重新加载页面。 SignalR尚未(重新)加载到新页面的上下文中,因此服务器不会向其发送通知。您可能希望尝试将StartedScanning请求作为AJAX请求,而不是导航离开当前页面。