我正在尝试在ASP.NET MVC 5中使用Teleric的Kendo Grid。我在这里遵循这个例子,但网格没有填充数据。列显示,但它显示“没有要显示的项目”。
这是我的单词/阅读功能:
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助手。我在做一些蠢事吗?
答案 0 :(得分: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属性的模型,而不是我班级的所有属性。
答案 1 :(得分:0)
可能是因为您在控制器中没有使用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);
}