0

我正在做一个 MVC4 Web 应用程序并决定使用信号器,只有一件事我不明白,我可能做错了什么......

我有一个带有调用 HomeController 的 ActionLink 的页面(主页)。在控制器中我有这个:

家庭控制器:

public class HomeController : Controller
{
    private IHubContext context;
    public HomeController()
    {
        context = GlobalHost.ConnectionManager.GetHubContext<HomeHub>();
    }

    ...

    public ActionResult Scan()
    {
        context.Clients.All.StartedScanning();
    }
}

家庭中心:

public class HomeHub : Hub
{
    public void StartedScanning()
    {
        Clients.All.setStatusMessage("Scanning started...");
    }
}

索引.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>
}

实际上代码执行得很好,但只在其他窗口中而不是在主窗口中。这正常吗?

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

谢谢。

4

1 回答 1

0

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

于 2013-07-22T13:06:44.397 回答