【问题标题】:Kendo UI Grid SignarlR datasource not firing update eventKendo UI Grid SignarlR 数据源未触发更新事件
【发布时间】:2019-09-25 23:11:17
【问题描述】:

我正在使用带有 Kendo Grid 的 asp.net core razor 页面,该 Kendo Grid 使用 SignalR 提供数据源。初始读取正常,但更新不会触发。我查看了 Kendo Demo 和其他 stackover 流程​​页面,但似乎没有任何效果。

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

索引.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()
    )


API

[HttpGet]
        public async Task<myModel> GetTest()
        {
            myModel mod= new myModel();
            mod.Name = "New Name";
            mod.Date = DateTime.UTCNow.ToString();

            //Send update command to connected SignalR Clients
            await _hub.Clients.All.SendAsync("update", mod);

            return mod;
        }

任何帮助将不胜感激。

【问题讨论】:

    标签: razor kendo-ui signalr


    【解决方案1】:

    好的,我得到了这个工作。事实证明,由于 Grid 最初期望 DataSourceResult 我必须在进行更新之前将 myModel 转换为 DataSourceResult 类型。下面的示例应该被视为伪代码,因为我在手机上输入了这个。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多