从(盒装)Syncfusion Ajax 调用通知客户端
Notifying clients from (boxed) Syncfusion Ajax call
我正在尝试集成来自 Syncfusion 的计划组件。该组件有一个 URL 适配器连接到控制器;用于 Crud 操作的 GetData() 和 Batch()。 Batch 有一个有效负载,指示要执行的操作。最后,Batch 方法将重新查询数据库并发回与 GetData() 相同的数据。
不幸的是,没有内置的方法来通知客户端出现任何问题——无论是异常、服务器端验证启动还是类似情况。
我想做的是在组件之外添加一个占位符来接收和显示服务器消息(无论是通知弹出窗口,a 还是其他什么。
由于我无法影响 Ajax 调用本身,我想知道我是否必须开始使用 SignalR(据我所知,.Net Core 2 仍处于测试阶段),或者我是否可能错过了更多内容明显的?我已经阅读了很多关于推送通知等的内容 - 但这些并不是我所追求的,我认为它有点过头了。
总而言之,假设我有
<div id="messages"></div>
<div id="component">HereGoesTheScheduleWhichICantDoMuchWith</div>
现在在 Batch() 方法中,调用 SendMessage("Sorry,you can't do this") 会很棒 - 其文本理想情况下会出现在消息中 -div。
你会怎么做?
我现在已经解决了这个问题,使用 SignalR(当前为 1.0.0-alpha2-final),为了在客户端上有一个很好的视图,PNotify。
目前,它仅在客户端经过身份验证时有效,如果它需要匿名工作,您需要找到一种方法来跟踪 SignalR 的连接 ID。
在包含 Syncfusion Schedule 组件的页面上,我连接到 SignalR。
let connection = new signalR.HubConnection("/signalr", { transport: signalR.TransportType.ServerSentEvents });
connection.on("Notify",
(标题,消息)=> {
新的 PNotify({
标题:标题,
文本:消息
});
});
connection.start();
集线器(SignalRHub : Hub)为连接的用户创建了一个通知组:
public 覆盖任务 OnConnectedAsync()
{
Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name);
return base.OnConnectedAsync();
}
关联的控制器被 IHubContext<SignalRHub> signalRHub
注入。
现在在Batch-Method的Syncfusion组件中,return是Json并且本身不能携带消息或通知,可以通知用户:
_signalRHub.Clients.Group(User.Identity.Name).InvokeAsync("Notify", "A title", "A message");
在我的特殊情况下,我发送一个 object 来控制 PNotify 的布局、动画和弹出窗口持续时间(例如,允许 copy/paste 等的异常时间更长)- 随您便.返回 object 可以使用:
_signalRHub.Clients.Group(User.Identity.Name).InvokeAsync("Notify", JsonConvert.SerializeObject(new { title = "Some Title", message = "notification", type = "notice"}););
显然,connection.on("Notify"
...需要进行相应更改。
我希望这已经足够清楚并且可能对其他人有所帮助。
我正在尝试集成来自 Syncfusion 的计划组件。该组件有一个 URL 适配器连接到控制器;用于 Crud 操作的 GetData() 和 Batch()。 Batch 有一个有效负载,指示要执行的操作。最后,Batch 方法将重新查询数据库并发回与 GetData() 相同的数据。 不幸的是,没有内置的方法来通知客户端出现任何问题——无论是异常、服务器端验证启动还是类似情况。 我想做的是在组件之外添加一个占位符来接收和显示服务器消息(无论是通知弹出窗口,a 还是其他什么。 由于我无法影响 Ajax 调用本身,我想知道我是否必须开始使用 SignalR(据我所知,.Net Core 2 仍处于测试阶段),或者我是否可能错过了更多内容明显的?我已经阅读了很多关于推送通知等的内容 - 但这些并不是我所追求的,我认为它有点过头了。
总而言之,假设我有
<div id="messages"></div>
<div id="component">HereGoesTheScheduleWhichICantDoMuchWith</div>
现在在 Batch() 方法中,调用 SendMessage("Sorry,you can't do this") 会很棒 - 其文本理想情况下会出现在消息中 -div。 你会怎么做?
我现在已经解决了这个问题,使用 SignalR(当前为 1.0.0-alpha2-final),为了在客户端上有一个很好的视图,PNotify。 目前,它仅在客户端经过身份验证时有效,如果它需要匿名工作,您需要找到一种方法来跟踪 SignalR 的连接 ID。
在包含 Syncfusion Schedule 组件的页面上,我连接到 SignalR。
let connection = new signalR.HubConnection("/signalr", { transport: signalR.TransportType.ServerSentEvents });
connection.on("Notify", (标题,消息)=> { 新的 PNotify({ 标题:标题, 文本:消息 }); }); connection.start();
集线器(SignalRHub : Hub)为连接的用户创建了一个通知组:
public 覆盖任务 OnConnectedAsync() { Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name);
return base.OnConnectedAsync(); }关联的控制器被
IHubContext<SignalRHub> signalRHub
注入。现在在Batch-Method的Syncfusion组件中,return是Json并且本身不能携带消息或通知,可以通知用户:
_signalRHub.Clients.Group(User.Identity.Name).InvokeAsync("Notify", "A title", "A message");
在我的特殊情况下,我发送一个 object 来控制 PNotify 的布局、动画和弹出窗口持续时间(例如,允许 copy/paste 等的异常时间更长)- 随您便.返回 object 可以使用:
_signalRHub.Clients.Group(User.Identity.Name).InvokeAsync("Notify", JsonConvert.SerializeObject(new { title = "Some Title", message = "notification", type = "notice"}););
显然,connection.on("Notify"
...需要进行相应更改。
我希望这已经足够清楚并且可能对其他人有所帮助。