Kendo ajax 网格不显示它正在接收的数据

问题描述 投票:0回答:1

我无法让我的网格呈现它正在检索的数据。我的控制器中有以下代码,并通过查看浏览器中的网络选项卡来验证它是否返回:

 [HttpPost, HttpGet]
    public ActionResult SavedSettings_Read([DataSourceRequest] DataSourceRequest request)
    {
        var ret = DBFunctions.SavedStringInfos.ToDataSourceResult(request);
        //return Json( ret); made everything lowercase?
        return JsonConvert.SerializeObject(ret);//newtonsoft

    }

我的网格是这样定义的:

    Html.Kendo().Grid<SavedStringInfo>()
        .Name("grid")
        .Pageable()
        .Sortable()
        .Filterable()
        .Scrollable()
        .Editable(editable => editable.Mode(GridEditMode.InLine))
        .DataSource(data =>
        {
            data.Ajax()
                .PageSize(20)

                .Model(x => x.Id(p => p.IPAddress))
                .Create("SavedSettings_Create", "Home")
                .Read("SavedSettings_Read", "Home")
                .Update("SavedSettings_Update", "Home")
                .Destroy("SavedSettings_Destroy", "Home");
        })

        .HtmlAttributes(new { style = "height:430px;" })
        .ToolBar(t => t.Create().Text("Add New Device(s)"))
        .Columns( columns =>
        {
            columns.Command(x => { x.Edit(); x.Destroy(); });

            columns.Bound(m => m.StreamTo).Title("Stream To").Width(120);
            columns.Bound(m => m.StringName).Title("String Name").Width(200);
            columns.Group(g =>
            {
                g.Title("Channels");
                g.Columns(gc =>
                {
                    gc.Bound(m => m.StartChannel).Title("Start").Width(100);
                    gc.Bound(m => m.EndChannel).Title("End").Width(100);
                });
            });
            columns.Bound(m => m.DisableFrameLimiter).Title("DFL").Width(100);
            columns.Bound(m => m.IPAddress).Title("IP Address").Width(160);
            columns.Bound(m => m.MacAddress).Title("MAC Address)").Width(160);
            columns.Group(g =>
            {
                g.Title("Aspect Ratio");
                g.Columns(gc =>
                {
                    gc.Bound(m => m.XYAspectRatio).Title("XY").Width(100);
                    gc.Bound(m => m.XZAspectRatio).Title("XZ").Width(100);
                });
            });
        })
    )

我还通过以下方式验证了网格的数据源实际上是空的: $("#grid").data("kendoGrid")._data 也 $("#grid").data("kendoGrid").dataItems() 并检查树。

我显然错过了一个重要的设置,但我不知道是什么。 这是返回的 json(在 fiddler 中捕获)

{
"Data": [
   {
     "ID": 1,
     "StringName": "Line in bedroom",
     "StartChannel": 1,
     "IPAddress": "192.168.4.166",
     "MacAddress": "a8:03:2a:3e:76:95",
     "StreamTo": true,
     "XYAspectRatio": 0.8,
     "XZAspectRatio": 0,
     "DisableFrameLimiter": true
   },
   {
     "ID": 2,
     "StringName": "Right poles",
     "StartChannel": 1,
     "IPAddress": "192.168.4.36",
     "MacAddress": "a4:e5:7c:c4:75:01",
     "StreamTo": true,
     "XYAspectRatio": 0.45455,
     "XZAspectRatio": 11.36364,
     "DisableFrameLimiter": true
   },
   {
     "ID": 3,
     "StringName": "Left poles",
     "StartChannel": 1,
     "IPAddress": "192.168.4.37",
     "MacAddress": "a4:e5:7c:5e:6f:f9",
     "StreamTo": true,
     "XYAspectRatio": 0.5,
     "XZAspectRatio": 11.36364,
     "DisableFrameLimiter": true
   }
 ],
 "Total": 3,
 "AggregateResults": null,
 "Errors": null
}

有什么想法吗?

kendo-ui kendo-grid kendo-asp.net-mvc
1个回答
0
投票

如果有人可以插话并解释为什么这解决了我的问题,我会改变我接受的答案。 在我的 Program.cs 中,您可以在其中配置 Web 应用程序生成器,我向 NewtonSoft 添加了一个配置参数以供使用

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddKendo();
builder.Services.AddControllersWithViews()
            .AddNewtonsoftJson(options =>
            {
                options.UseMemberCasing();
            }
        );

var app = builder.Build();

然后,我对我的控制器进行了以下更改

 public ActionResult<string> SavedSettings_Read([DataSourceRequest] DataSourceRequest request)
    {
        var ret = DBFunctions.SavedStringInfos.ToDataSourceResult(request);
        return Json(ret);
    }

现在,眼尖的人可能明白为什么这让我感到困惑。 Json 不属于 NewtonSoft,并且序列化对象调用不适用于 Program.cs 中的更改,并且需要两个更改才能解决此问题。如果有人可以解释为什么这会修复它,请指向您。在那之前,我希望这能帮助其他被困的人。

© www.soinside.com 2019 - 2024. All rights reserved.