gpt4 book ai didi

asp.net - 客户端如何使用 SignalR 向服务器发送值,然后服务器更新模型?

转载 作者:行者123 更新时间:2023-12-02 10:15:30 24 4
gpt4 key购买 nike

如果我想使用 SignalR 更新模型/数据库,如何实现? (很多教程中都解释了相反的方式,即从服务器到客户端,但是这样呢?)

假设我们有一个简单的模型

public class User
{
public int UserID { get; set; }

public string UserName { get; set; }

}

并且相应的View有一个名称的输入字段。集线器类似于

public class UserHub : Hub
{
public void UpdateName(string value)
{
// now what?

Clients.All.updateTheViewIfNecessary(string newValue);

}
}

编辑如何更新模型,即如何获得与常规 CRUD 编辑 Controller 相同的结果

db.Entry(user).State = EntityState.Modified;
db.SaveChanges();

最佳答案

出于本示例的目的,我们将使用 JS 客户端将模型发送到 Hub 并引用官方文档

ASP.NET SignalR Hubs API Guide - JavaScript Client: How to call server methods from the client

假设服务器上有一个用户中心

public interface IUserService {
bool UpdateName(string userName);
// Other methods not shown.
}

public class UserHub : Hub {
private readonly IUserService service;

public UserHob(IUserService service) {
this.service = service;
}

public void UpdateName(string value) {
if(value != null) {
var newValue = value;
if(service.UpdateName(newValue) == true) {
Clients.All.updateTheViewIfNecessary(newValue);
}
}
}
}

引用文档位于Dependency Injection in SignalR了解如何将依赖项注入(inject)集线器。在上面的 UserHub 中,当收到消息时,它会使用模型中的数据通过注入(inject)的依赖项来更新/保留数据,并根据该操作的结果通知客户端。这可以允许长时间运行的进程,稍后可以根据需要更新客户端。

调用服务器方法(假设使用生成的代理)的 JavaScript 客户端代码将如下所示。

//This assumes View has an input field for the name
var message = "Test Name";
userHubProxy.server.updateName(message).done(function () {
console.log ('Invocation of UpdateName succeeded');
}).fail(function (error) {
console.log('Invocation of UpdateName failed. Error: ' + error);
});

框架将处理需要在服务器上完成的任何模型绑定(bind)。

集线器实际上充当服务端点,并将调用服务的响应发送到连接到它的所有客户端。

关于asp.net - 客户端如何使用 SignalR 向服务器发送值,然后服务器更新模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com