【问题标题】:JS Client doesn't invoke Method on SignalR HubJS 客户端不调用 SignalR Hub 上的方法
【发布时间】:2018-04-30 14:48:49
【问题描述】:

我有一个 MVC 项目,它有 2 个按钮和 6 个文本框。我想在集线器上调用不同的方法。

客户

$(document).ready(function () {
            var bitcoinHub = $.connection.bitcoinHub;

            $("#btnBuy").click(function () {
                var tl = document.getElementById("bitcoinBuy").value;
                var btc = document.getElementById("aBitcoin").value;
                var total = document.getElementById("aTotal").value;
                bitcoinHub.server.trade("buy",@Model.user,tl,btc,total);
            });

            bitcoinHub.client.broadcastSell = function (model) {
                //   $("#sellGrid").append("<li>"+model.Sell+"</li>");
            };

            $("#btnSell").click(function () {
                var tl = document.getElementById("bitcoinSell").value;
                var btc = document.getElementById("sBitcoin").value;
                var total = document.getElementById("sTotal").value;
                bitcoinHub.server.trade("sell",@Model.user,tl,btc,total);
            });

            bitcoinHub.client.broadcastPurchase = function (model) {
                // $("#buyGrid").append("<li>"+model.Buy+"</li>");
            };
            $.connection.hub.start();   });

如果我按下“btnBuy”或“btnCell”,它应该使用不同的参数调用服务器上的交易方法。

服务器

BitcoinHub(name) 类方法

 public void trade(string parametre, Users cUser, string tl, string btc, string total)
    {
        switch (parametre)
        {
            case "sell":
                // Do something not important here
                break;
            case "buy":
                // Do something not important here
                break;
        }
    }

如果我按下“btnBuy”或“btnCell”,它会通过clickeventhandler。问题是集线器上的方法不会被调用。

【问题讨论】:

  • 我不明白我们的最后一节。能改写一下更清楚吗?
  • 我有一个 mvc 表单。每个按钮都有 2 个按钮和 3 个文本框。当我按下第一个按钮时,它将获取 3 个文本框的值并发送到服务器端交易方法,它将用于将数据插入数据库。问题:当我按下按钮时。 Js 的 .click 事件同时工作。当我使用断点代码调用第一个 .click 代码块并跳转到其他按钮的 .click 函数时。其他问题:但在此服务器端的交易方法没有调用之后。
  • 你也可以添加你的html吗?
  • 其他点:您确定连接已启动吗?我会将订阅点击事件的核心移动到 $.connection.hub.start().done(function(){}); });
  • 我现在正在尝试,但我真的不知道 SignalR 语法,如果你有时间可以从 github 修复吗? github.com/kadirkalkan/PragmaLinq

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


【解决方案1】:

你不能像@Model.user那样在JS中使用模型。详情见Accessing MVC's model property from Javascript

另外重新排列您的代码。在建立连接之前不要调用服务器上的方法:

$(document).ready(function () {
                var bitcoinHub = $.connection.bitcoinHub;           

                bitcoinHub.client.broadcastSell = function (model) {
                    //   $("#sellGrid").append("<li>"+model.Sell+"</li>");
                };

                bitcoinHub.client.broadcastPurchase = function (model) {
                    // $("#buyGrid").append("<li>"+model.Buy+"</li>");
                };
                $.connection.hub.start().done(function(){
                    // DO not call methods on server until connection is established.
                    $("#btnBuy").click(function () {
                        var tl = document.getElementById("bitcoinBuy").value;
                        var btc = document.getElementById("aBitcoin").value;
                        var total = document.getElementById("aTotal").value;
                        bitcoinHub.server.trade("buy",@Model.user,tl,btc,total);
                    });
                    $("#btnSell").click(function () {
                        var tl = document.getElementById("bitcoinSell").value;
                        var btc = document.getElementById("sBitcoin").value;
                        var total = document.getElementById("sTotal").value;
                        bitcoinHub.server.trade("sell",@Model.user,tl,btc,total);
                });
    });   });

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多