0

'.chatHub' は、すべてのシグナル r コードをすべてのページに読み込まれるバンドルに移動した後、ページの読み込み時に未定義です

singal r のインストールに成功し、Asp.Net MVC サイトであるユーザーから別のユーザーにチャット メッセージを送信できます。しかし、MS のドキュメントには 1 つのページのみの実装が示されているため、別のページの別のユーザーにメッセージを送信したいと考えています。

そこで、javascript ハブの接続/初期化コードを、すべてのページにロードされる my-chat.js という名前のファイルに移動し、シグナル r js ファイルとシグナル r ハブ参照をこのようなバンドルに配置しました。

bundles.Add(new ScriptBundle("~/bundles/my-base").Include(
                  "~/Scripts/jquery.signalR-2.3.0.min.js",
                  "~/signalr/hubs",
                  "~/Scripts/my-base/my-chat.js"));

私のレイアウトページでは、このように正しい順序でロードされます

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/my-base")
@RenderSection("scripts", required: false)

しかし、メイン/最初のページをロードすると、「my-chat.js」が呼び出されます

scope.initializeHub()

これは次のようになり、「$.connection.chatHub」chatHub は未定義です

scope.initializeHub = function () {
    $(function () {
        var chat = $.connection.chatHub;

        chat.client.addNewMessageToPage = function (message) {
            // do stuff
        };
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                chat.server.send(scope.userId, $('#message').val());
            });
        });
    });
};

これはこれを行う正しい方法ですか?

「〜/シグナル/ハブ」

バンドルのどこに置くべきではないのですか?

私も入れてみました

<script src="/signalr/hubs" type="text/javascript"></script>

<script src="~/signalr/hubs" type="text/javascript"></script>

私のレイアウトページのヘッドセクションで、それはうまくいきませんでした.

4

1 に答える 1