Kendo Grid 具有正确的 JSON,但数据未显示

Posted

技术标签:

【中文标题】Kendo Grid 具有正确的 JSON,但数据未显示【英文标题】:Kendo Grid has correct JSON but data not showing up 【发布时间】:2014-06-14 07:43:28 【问题描述】:

我正在尝试在 ASP.NET MVC 5 中使用 Teleric 的 Kendo Grid。我正在按照此处的示例进行操作,但该网格没有填充数据。列显示,但它显示“没有要显示的项目”。

http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/ajax-binding

这是我的单词/阅读功能:

    public ActionResult Read([DataSourceRequest] DataSourceRequest request)
    
        var items = db.Words.Take(1).ToList();
        //this code was necessary to get the correct JSON result
        JsonSerializerSettings jsSettings = new JsonSerializerSettings();
        jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        var converted = JsonConvert.SerializeObject(items, null, jsSettings);
        return Content(converted);
    

我从 Words/Read 中得到以下 JSON 结果:

["WordId":1,"Rank":1,"PartOfSpeech":"article","Image":"Upload/29/1/Capture1.PNG","FrequencyNumber":"22038615","Article":null,"ClarificationText":null,"WordName":"the | article","MasterId":0,"SoundFileUrl":"/UploadSound/7fd752a6-97ef-4a99-b324-a160295b8ac4/1/sixty_vocab_click_button.mp3","LangId":1,"CatId":null,"IsActive":false]

最后是我的查看页面:

@(html.Kendo().Grid<NextGen.Models.Word>
    ()
    .Name("grid")
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(15)
        .Read(read => read.Action("Read", "Words"))
    )
    .Columns(columns =>
    
        columns.Bound(c => c.WordName);
        columns.Bound(c => c.PartOfSpeech);
    )
    .Pageable()
    .Sortable()
)

我看到了一些与此类似的问题,但大多数使用的是 javascript 而不是 Html 帮助程序。我在做傻事吗?

【问题讨论】:

我认为 /"s 是个大问题。它对我的 Json 进行了双重序列化,但我不知道如何摆脱它。我需要传入 JSONSerializer 设置以避免引用循环,但我也不能只返回转换值。有没有办法可以将 JSONSerializer 设置传递给 JSON 调用? 对该评论得到了很好的回答,尽管整个代码仍然无法正常工作。 【参考方案1】:

我找到了一种替代方法来解决我遇到的循环引用问题。基本上,答案就在这里:A circular reference was detected while serializing an object of type 'SubSonic.Schema .DatabaseColumn'.

对于有同样问题的人:我获取了我需要的两个属性 - WordName 和 PartOfSpeech,并且只将这些属性传递给了 Kendo 提供的 toDataSource 函数。 我的新读取函数如下所示:

        public ActionResult Read([DataSourceRequest] DataSourceRequest request)
    
        var items = db.Words.Select(w => new WordL
            WordName = w.WordName,
            PartOfSpeech = w.PartOfSpeech
        );

        return Json(items.ToDataSourceResult(request));
    

其中 WordL 是仅具有 PartOfSpeech 和 WordName 属性的模型,而不是我的类的所有属性。

【讨论】:

【参考方案2】:

这可能是因为您没有在控制器中使用 2 种方法。当您的页面视图是第一个 ActionResult 时,您应该像在示例中那样在网格中使用第二个。我希望这是显而易见的。

public ActionResult ReadPage()

    return View();


public ActionResult Read([DataSourceRequest] DataSourceRequest request)

    var items = db.Words.Take(1).ToList();
    //this code was necessary to get the correct JSON result
    JsonSerializerSettings jsSettings = new JsonSerializerSettings();
    jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    var converted = JsonConvert.SerializeObject(items, null, jsSettings);
    return Content(converted);    

【讨论】:

以上是关于Kendo Grid 具有正确的 JSON,但数据未显示的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 数据与 Kendo Grid 绑定

调用读取后未填充 Kendo UI Grid

Kendo UI Grid 不会绑定到数据

为啥除非手动更改页面大小,否则 Kendo Grid 无法正确显示数据?

Kendo Grid DateTime 列显示不正确的日期

带有自定义JSON Web服务器的Kendo UI Grid - “未捕获的TypeError:this.replace不是函数”