Kendo UI Grid SignarlR источник данных не запускает событие обновления - PullRequest
0 голосов
/ 26 сентября 2019

Я использую основные страницы бритвы asp.net с сеткой Kendo, поставляемой с помощью SignalR.Он получает начальное чтение нормально, но обновление не запускается.Я посмотрел демо-версию Kendo и другие страницы потокового перехода, но ничего не помогло.

Я знаю, что API отлично работает при отправке обновления, потому что при отладке через Chrome я вижу, что websocket получил команду обновления с новыми данными в формате json.Но Grid не обновляет и не запускает команды обновления.Это как если бы оно никогда не получало его или не знает, что оно получило его.

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()
    )


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;
        }

Любая помощь будетоценены.

1 Ответ

0 голосов
/ 27 сентября 2019

Хорошо, я получил это на работу.Оказывается, поскольку Grid изначально ожидал DataSourceResult, мне пришлось преобразовать myModel в тип DataSourceResult перед выполнением обновления.Пример ниже должен рассматриваться как псевдокод, поскольку я набираю это на своем телефоне.

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