簡體   English   中英

向SignalR中的特定用戶發送值

[英]send value to specific User in SignalR

用戶按下“使用SignalR”發送按鈕后,我同時填寫了4個文本框。 在一部分中,我正在將文本框值發送給所有用戶,並且此操作有效。 但是,當我嘗試將值發送給特定用戶時,按下按鈕后,所有文本框都為空。

這是起作用的代碼,它向所有用戶發送值:

這是集線器:

 public void Send(string loanType, string loanAmount, string interestRates, string payment)
    {
        User sender = GetUser(Context.User.Identity.Name);

        var username = sender.Name;
        IEnumerable<string> connectionIds = sender.ConnectionIds;

        //All connected clients.
        Clients.All.broadcastMessage(loanType, loanAmount, interestRates, payment);

    }

這是js:

  $('#sendmessage').click(function (e) {
            sendPayment();
            e.preventDefault();
        });


        function sendPayment() {
        var msgValue = $msgTxt.val();
        var loanType = $('#txtLoanType').val();
        var loanAmount = $('#txtLoanAmount').val();
        var interestRates = $('#txtInterestRates').val();
        var payment = $('#txtPayment').val();

        if (loanType !== null && loanType.length > 0 && loanAmount !== null && loanAmount.length > 0 && interestRates !== null && interestRates.length > 0
            && payment !== null && payment.length > 0) {

            if (viewModel.isInPrivateChat()) {
                $.connection.hub.start();
                chatHub.server.send(msgValue, viewModel.privateChatUser(), $('#txtLoanType option:selected').val(), $('#txtLoanAmount').val(), $('#txtInterestRates').val(), $('#txtPayment').val());


            }
            else {

                 // Call the Send method on the hub.
                chatHub.server.send($('#txtLoanType option:selected').val(), $('#txtLoanAmount').val(), $('#txtInterestRates').val(), $('#txtPayment').val());


            }
        }



     chatHub.client.broadcastMessage = function (loanType, loanAmount, interestRates, payment) {
            $('#txtLoanType').val(loanType);
            $('#txtLoanAmount').val(loanAmount);
            $('#txtInterestRates').val(interestRates);
            $('#txtPayment').val(payment);
    };

但是,當我嘗試將值發送給特定用戶時,它不起作用:由於我正在刪除C#代碼,因此問題出在JS:

這是將文本框的值發送給特定用戶的C#方法:

 public void Send(string message, string to, string loanType, string loanAmount, string interestRates, string payment)
    {
        User receiver;
        if (Users.TryGetValue(to, out receiver))
        {

            User sender = GetUser(Context.User.Identity.Name);

            IEnumerable<string> allReceivers;
            lock (receiver.ConnectionIds)
            {
                lock (sender.ConnectionIds)
                {

                    allReceivers = receiver.ConnectionIds.Concat(sender.ConnectionIds);
                }
            }

            foreach (var cid in allReceivers)
            {
                Clients.Client(cid).broadcastMessage(new { message = message, isPrivate = true, loanType = loanType,
                    loanAmount = loanAmount,
                    interestRates = interestRates,
                    payment = payment
                });
            }
        }
    }

它將調用JS文件中的Private部分,即:

               if (viewModel.isInPrivateChat()) {
                $.connection.hub.start();
                chatHub.server.send(msgValue, viewModel.privateChatUser(), $('#txtLoanType option:selected').val(), $('#txtLoanAmount').val(), $('#txtInterestRates').val(), $('#txtPayment').val());

功能簽名不匹配。 參數的數量不同,它們必須完全匹配,否則javascript函數將永遠不會被調用,當您調用broadcastMessage函數時,您似乎正在嘗試使用send函數的參數。

在要查找的用戶的JavaScript中:

function (loanType, loanAmount, interestRates, payment)

但是您正在發送:

broadcastMessage(new { message = message, isPrivate = true, loanType = loanType,
                loanAmount = loanAmount,
                interestRates = interestRates,
                payment = payment
            })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM