You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core使用SignalR时如何用JS给表格加单行并解决重复问题

问题根因

你每次收到UpdateServers信号通知时,都会调用接口拉取全量服务器数据,且直接使用append方法将所有数据追加到表格末尾,没有清空上一次渲染的历史数据,因此每次更新都会重复叠加全量数据,导致出现重复条目。

修复方案

在遍历渲染新数据前,先清空表格的原有内容即可,只需要在$.each遍历逻辑前新增一行清空tbody的代码:

$('#table').empty();

修改后的完整JS代码如下:

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.js"></script>
<script>
    var connection = new signalR.HubConnectionBuilder().withUrl("/myHub").build();

    connection.on("UpdateServers", function () {
        $.get("/api/ServersAPI", function (data) {
            console.log(data);
            // 新增清空逻辑,避免重复渲染
            $('#table').empty();
            $.each(data, function (i, item) {
                var img;
                if (item.state == "Ready") {
                    img = "<img src='~/icons/enabled.png' style='width: 20px; height: 20px'/>"
                } else if (item.state == "Reboot Pending") {
                    img = "<img src='~/icons/warning.png' style='width: 20px; height: 20px'/>"
                }
                $('#table').append("<tr><td>" + item.computerName + "</td><td>" + item.type + "</td><td>" + img + "</td>");
            });
        });
    });

    connection.start().then(() => {
        connection.invoke("PostServers").catch(function (err) {
            return console.error(err.toString());
        });
    });
</script>

可选优化

如果想要降低接口请求开销,也可以调整SignalR的推送逻辑:新增服务器时,UpdateServers事件直接返回新增的单条服务器数据,前端无需再调用全量接口,直接将新数据追加到表格即可,不需要清空原有内容。


内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:45:05