c# - Kendo UI Grid 在调用读取后未填充

标签 c# .net kendo-ui kendo-grid kendo-asp.net-mvc

好的,我还有一个,我确定我又漏掉了一些简单的东西。使用 json 结果集填充 Kendo 网格。加载由来自 kendo 下拉列表控件的选择触发。我可以看到数据从我的 webapi 返回并转换为 json 结果。但是网格中没有显示数据。

我做错了什么?

这是 GridView 的添加方式:

<div id="messageGridArea">
    @Html.Partial("Messages")
</div>

下拉列表定义如下:

@(Html.Kendo().DropDownList()
    .Name("importDates")
    .CascadeFrom("clients")
    .OptionLabel("Select Import Date...")
    .DataSource(source => {
        source.Read(read =>
        {
            read.Action("GetDistinctImportDates", "Home").Data("filterImportDates");
        })
        .ServerFiltering(true); 
     })
     .AutoBind(false)
     .Enable(false)
     .Events(e => e.Change("OnImportDatesChanged"))
)

这是网格参数的过滤器:

function filterGridMessages() {
    return { importdate: $("#importDates").val() };
}

这是填充网格的事件:

function OnImportDatesChanged(e) {
    var grid = $("#clientMessages").data("kendoGrid");
    grid.dataSource.read();
}

这是网格定义:

@(Html.Kendo().Grid<Pulse.Data.Model.ImportHeader>()
    .Name("clientMessages")
    .AutoBind(false)
    .Filterable()
    .Groupable()
    .Sortable()
    .Pageable()
    .Scrollable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => model.Id(p => p.ImportId))
        .ServerOperation(false)
        .Read(read =>
            read.Action("GetImportMessages", "Home").Data("filterGridMessages")
         )
    )
    .Columns(columns =>
    {
        columns.Bound("ImportStatus").Title("I").Width("3%");
        columns.Bound("ImportTime").Title("Import Time");
        columns.Bound("RecordStatus").Title("Status").Filterable(true).Sortable(true).Width("7%");
        columns.Bound("RecordState").Title("State").Filterable(true).Sortable(true).Width("7%");
        columns.Bound("RecordAction").Title("Action").Filterable(true).Sortable(true).Width("7%");                
    })
)

最后是读取数据的 Controller 代码:

public JsonResult GetImportMessages(string importdate)
{
    IEnumerable<ImportHeader> messages = null;
    var msgs = client.GetStringAsync(string.Format("api/importheaders?$filter=RecordSource eq '{0}'", importdate)).Result;
    if (!string.IsNullOrWhiteSpace(msgs))
        messages = JsonConvert.DeserializeObject<IEnumerable<ImportHeader>>(msgs);
    return Json(messages, JsonRequestBehavior.AllowGet);
}

最佳答案

网格需要一个 DataSourceResult。

你应该得到这样的东西(还没有测试过):

public JsonResult GetImportMessages([DataSourceRequest] DataSourceRequest request, string importdate)
{
    IEnumerable<ImportHeader> messages = null;

    var msgs = client.GetStringAsync(string.Format("api/importheaders?$filter=RecordSource eq '{0}'", importdate)).Result;
    if (!string.IsNullOrWhiteSpace(msgs))
        messages = JsonConvert.DeserializeObject<IEnumerable<ImportHeader>>(msgs);

    return Json(messages.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

关于c# - Kendo UI Grid 在调用读取后未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707806/

相关文章:

c# - 如何根据先前返回的值向 LINQ 查询添加条件条件

javascript - Kendo UI 图表 - 更改标记样式

kendo-ui - 从服务器端绑定(bind)时,Kendo UI 网格数据在客户端始终为空

c# - POCO 和多个 ViewModel 指向同一个 POCO?

c# console app 按下空格键而不在屏幕上显示

c# - Enumerable.Repeat 用于引用类型对象的初始化

c# - 什么替代了 .net 中的代码访问安全性

css - 更改 Kendo UI 上传控件 "drop your file here"消息更改

c# - 部署在远程机器上时 SignalR 不工作

c# - 使用正则表达式替换引号外的空格