JS 客户端不调用 SignalR Hub 上的方法
Posted
技术标签:
【中文标题】JS 客户端不调用 SignalR Hub 上的方法【英文标题】:JS Client doesn't invoke Method on 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 【参考方案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);
);
); );
【讨论】:
以上是关于JS 客户端不调用 SignalR Hub 上的方法的主要内容,如果未能解决你的问题,请参考以下文章