Razor 剑道UI网格签名器数据源未触发更新事件

Razor 剑道UI网格签名器数据源未触发更新事件,razor,kendo-ui,signalr,Razor,Kendo Ui,Signalr,我正在使用asp.net core razor页面和剑道网格,剑道网格是使用Signal的数据源。它的初始读取结果为ok,但更新不会触发。我看过剑道演示和其他stackover flow页面,但似乎没有任何效果 我知道API在发送更新时工作得很好,因为我在通过Chrome调试websocket时看到调用,websocket接收到一个更新命令,其中包含json格式的新数据。但是网格不会更新,也不会发出任何更新命令。就好像它从来没有收到过,或者不知道它收到过 Index.cshmtl <scr

我正在使用asp.net core razor页面和剑道网格,剑道网格是使用Signal的数据源。它的初始读取结果为ok,但更新不会触发。我看过剑道演示和其他stackover flow页面,但似乎没有任何效果

我知道API在发送更新时工作得很好,因为我在通过Chrome调试websocket时看到调用,websocket接收到一个更新命令,其中包含json格式的新数据。但是网格不会更新,也不会发出任何更新命令。就好像它从来没有收到过,或者不知道它收到过

Index.cshmtl

<script src="~/signalr/signalr.js"></script>
<script>
    var url = https://demosite.com/hub/controller;

    var hub = new signalR.HubConnectionBuilder()
        .configureLogging(signalR.LogLevel.Information)
        .withUrl(url,
            {
                transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling 

            })
        .build();

    var hubStart = hub.start();

</script>


@(Html.Kendo().Grid<myModel>
    ()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.Name);
        columns.Bound(c => c.Date);

    })
    .HtmlAttributes(new { style = "width: 98%;" })
    .DataSource(dataSource => dataSource
        .SignalR()
        .AutoSync(true)
        .ServerFiltering(true)
        .ServerSorting(true)
        .PageSize(10)
        .Transport(tr => tr
            .Promise("hubStart")
            .Hub("hub")
            .Client(c => c
                .Read("read") //Read works, initial data loads
                .Create("create")
                .Update("update")
                .Destroy("destroy")
            )
            .Server(s => s
                .Read("read")
                .Create("create")
                .Update("update")
                .Destroy("destroy")
            )
        )
        .Schema(schema => schema
            .Data("Data")
            .Total("Total")
            .Aggregates("Aggregates")
            .Model(model =>
            {
                model.Id(p => p.ID);
                model.Field(p=> p.Name);
                model.Field(p => p.Date);
            }
        )
    )
)
.Group(g => g.Add(x => x.Name))
)
.Events(x=>
{
    x.DataBound("collapseAllGroups");
}
)
    .Groupable(true)
    .Sortable()
    .Filterable()
    .Pageable(pager => pager.AlwaysVisible(true).PageSizes(new int[] { 10, 20, 50, 100 }))
    .Resizable(resize => resize.Columns(true))
    .Reorderable(reorder => reorder.Columns(true))
    .Selectable()
    )



变量url=https://demosite.com/hub/controller;
var hub=new signal.HubConnectionBuilder()
.configureLogging(信号器.LogLevel.Information)
.withUrl(url,
{
传输:signal.HttpTransportType.WebSockets | signal.HttpTransportType.LongPolling
})
.build();
var hubStart=hub.start();
@(Html.Kendo().Grid)
()
.名称(“网格”)
.列(列=>
{
columns.Bound(c=>c.Name);
columns.Bound(c=>c.Date);
})
.HtmlAttributes(新的{style=“width:98%;”})
.DataSource(DataSource=>DataSource
.signar()
.自动同步(真)
.ServerFiltering(true)
.ServerSorting(true)
.页面大小(10)
.运输(tr=>tr
.承诺(“hubStart”)
.Hub(“Hub”)
.Client(c=>c
.Read(“Read”)//读取工作,初始数据加载
.创建(“创建”)
.更新(“更新”)
.销毁(“销毁”)
)
.Server(s=>s)
.读(“读”)
.创建(“创建”)
.更新(“更新”)
.销毁(“销毁”)
)
)
.Schema(Schema=>Schema
.数据(“数据”)
.总计(“总计”)
.骨料(“骨料”)
.Model(Model=>
{
model.Id(p=>p.Id);
model.Field(p=>p.Name);
model.Field(p=>p.Date);
}
)
)
)
.Group(g=>g.Add(x=>x.Name))
)
.事件(x=>
{
x、 数据绑定(“collapseallgroup”);
}
)
.Groupable(true)
.Sortable()
.可过滤()
.Pageable(pager=>pager.AlwaysVisible(true).PageSizes(新的int[]{10,20,50,100}))
.resize可调整大小(resize=>resize.Columns(true))
.Reorderable(reorder=>reorder.Columns(true))
.可选()
)
原料药

[HttpGet]
公共异步任务GetTest()
{
myModel mod=新的myModel();
mod.Name=“新名称”;
mod.Date=DateTime.UTCNow.ToString();
//向连接的信号器客户端发送更新命令
wait_hub.Clients.All.SendAsync(“更新”,mod);
返回模式;
}

如果有任何帮助,我们将不胜感激。

好的,我成功地完成了这项工作。事实证明,由于网格最初预期的是DataSourceResult,所以在进行更新之前,我必须将myModel转换为DataSourceResult类型。下面的例子应该被认为是伪代码,因为我在我的手机上输入这个

await _hub.Clients.All.SendAsync("update", new DataSourceResult(mod));
await _hub.Clients.All.SendAsync("update", new DataSourceResult(mod));