0

私は MVC4 Web アプリケーションを実行していて、signalr を使用することにしました。理解できないことが 1 つだけあります。おそらく何か間違ったことをしているのでしょう...

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 に答える