如何在 ASP.NET 控制器中发送客户端值?

Posted

技术标签:

【中文标题】如何在 ASP.NET 控制器中发送客户端值?【英文标题】:How Can I send Clients value in ASP.NET Controller? 【发布时间】:2021-08-06 16:33:23 【问题描述】:

我用 c#、javascript 编写了一个代码,使用客户端库 SignalR 在数据库值更改中刷新页面。我的代码是

<form asp-action="Start" method="post" class="form-stacked">
    <button type="submit" id="startPractice" class="button-primary">Start Practice</button>
</form>

<script src="~/js/ignalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>

我的API方法是点击开始练习时调用的

public async Task<IActionResult> Index(long sessionId)

     // Database change logic

     SignalRClientHub sr = new SignalRClientHub();
     await sr.SendMessage();

     // Rest of the logic

     return this.View();


 public class SignalRClientHub : Hub
    
        public async Task SendMessage(string user = null, string message = null)
        
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        
    

chat.js 代码

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/SignalRClient").build();

connection.on("ReceiveMessage", function (user, message) 
    location.reload();
);

当我单击按钮开始练习时,它会点击 SendMessage 方法,但我收到错误

object reference not set to an instance

因为 Client 的值为 null。我该如何解决这个问题?

【问题讨论】:

您的客户可能为空:await Clients.All.SendAsync("ReceiveMessage", user, message); 哪一行导致空引用错误? @Devilscomrade at await Clients.All.SendAsync("ReceiveMessage", user, message);这一行我得到一个错误 【参考方案1】:

不能手动新建集线器。为了从集线器外部发送给客户,您需要使用IHubContext&lt;THub&gt;。有关详细信息,请参阅文档https://docs.microsoft.com/aspnet/core/signalr/hubcontext?view=aspnetcore-5.0

【讨论】:

Clients 值现在不为空了,谢谢。现在在 SignalRClientHub 类中,我编写了一个代码,以便它调用 ``` connection.on("ReceiveMessage", function (user, message) location.reload(); ); ```上面chat.js的方法,我想重新加载位置,但是我不能去chat.js的那个方法,我尝试了console.log而不是location.reload,但是那个方法没有被调用集线器。你能帮忙了解一下chat.js的那个方法吗? 你启动客户端了吗?在您粘贴的代码中,您尚未启动客户端。 如何启动客户端? 你真的应该阅读文档docs.microsoft.com/aspnet/core/tutorials/… 非常感谢我没有错过连接开始它的工作。如果您能提供帮助,我还有另一个问题,那就太好了。每个页面都重新加载正常,但我不想重新加载调用 API 的选项卡,我该怎么做?

以上是关于如何在 ASP.NET 控制器中发送客户端值?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 asp.net vb 网站中发送电子邮件

在asp.net mvc 3中的后台作业/计划任务中发送电子邮件

如何在 VC++ 中发送电子邮件?

在 CodeIgniter 中发送电子邮件

如何在android中发送电子邮件[重复]

如何使用 LINQ 将空值发送到 ASP.NET 中的非空列