Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 剑道网格有正确的JSON,但没有显示数据_Asp.net Mvc_Json_Kendo Grid - Fatal编程技术网

Asp.net mvc 剑道网格有正确的JSON,但没有显示数据

Asp.net mvc 剑道网格有正确的JSON,但没有显示数据,asp.net-mvc,json,kendo-grid,Asp.net Mvc,Json,Kendo Grid,我试图在ASP.NETMVC5中使用Teleric的剑道网格。我在这里遵循这个示例,但是网格中没有填充数据。这些列显示出来,但上面写着“没有要显示的项目” 这是我的文字/阅读功能: public ActionResult Read([DataSourceRequest] DataSourceRequest request) { var items = db.Words.Take(1).ToList(); //this code was neces

我试图在ASP.NETMVC5中使用Teleric的剑道网格。我在这里遵循这个示例,但是网格中没有填充数据。这些列显示出来,但上面写着“没有要显示的项目”

这是我的文字/阅读功能:

    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()
)
@(Html.Kendo().Grid
()
.名称(“网格”)
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(15)
.Read(Read=>Read.Action(“Read”,“Words”))
)
.列(列=>
{
columns.Bound(c=>c.WordName);
columns.Bound(c=>c.PartOfSpeech);
})
.Pageable()
.Sortable()
)

我见过一些与此类似的问题,但大多数都使用Javascript而不是Html助手。我在做什么蠢事吗?

我找到了另一种解决循环引用问题的方法。基本上,答案如下:

对于有相同问题的人:我获取了所需的两个属性——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是一个仅具有部分Speech和WordName属性的模型,而不是我的类的所有属性。

这可能是因为您的控制器中没有使用两种方法。当您的页面视图是第一个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);    
}

我认为/“这是一个大问题。这是双重序列化我的Json,但我不知道如何摆脱它。我需要传入JSONSerializer设置以避免引用循环,但我也不能只返回convert值。有没有一种方法可以将JSONSerializer设置传递给JSON调用?这个注释得到了很好的答案,尽管整个代码仍然不起作用。