Kendo UI Grid возвращает json вместо отображения данных
Я использую сетку Kendo UI MVC. Контроллер возвращает данные, но они не отображаются в сетке. Что я делаю неправильно?
Контроллер
[OutputCache(Duration = 1, VaryByParam = "*")]
public ActionResult GetIdeasForApproval([DataSourceRequest] DataSourceRequest request)
{
IdeaResponse response = this.DashBoardService.GetIdeasForApproval();
IEnumerable<Idea> ideas = response.Ideas;
Idea viewModel = new Idea();
JsonResult result = new JsonResult();
result.Data =
Json(
response.Ideas.Select(
p =>
new
{
IdeaId = p.IdeaId,
Title = p.Title,
Description = p.Description,
//Photo = Convert.ToBase64String(p.TeamMember.Photo),
URL = p.Url ?? string.Empty
}));
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
}
@(Html.Kendo().Grid<Idea>()
.Name("ideas-for-approval")
.Columns(columns =>
{
columns.Bound(p => p.IdeaId).Visible(false);
columns.Bound(p => p.Title).Title("Title");
columns.Bound(p => p.Description).Title("Description");
columns.Bound(p => p.Url).Title("URL");
}
)
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("onError"))
.Read(read => read.Action("GetIdeasForApproval", "Dashboard"))
)
)
вернулся JSON
{"ContentEncoding":null,"ContentType":null,"Data":[{"IdeaId":431,"Title":"Test","Description":"test","URL":""},{"IdeaId":406,"Title":"Windows 10 For All Developers Test","Description":"Upgrade Windows 7 to Windows 10 for all developers. Test","URL":"https://www.microsoft.com/en-us/windows/features"},{"IdeaId":433,"Title":"Test Title","Description":"Test Description","URL":""}],"JsonRequestBehavior":1,"MaxJsonLength":null,"RecursionLimit":null}
1 ответ
Решение
Взяв код и слегка его подправив из:
JsonResult result = new JsonResult();
result.Data =
Json(
response.Ideas.Select(
p =>
new
{
IdeaId = p.IdeaId,
Title = p.Title,
Description = p.Description,
//Photo = Convert.ToBase64String(p.TeamMember.Photo),
URL = p.Url ?? string.Empty
}));
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
чтобы:
var model = response.Ideas.Select(p => new {
IdeaId = p.IdeaId,
Title = p.Title,
Description = p.Description,
//Photo = Convert.ToBase64String(p.TeamMember.Photo),
URL = p.Url ?? string.Empty
});
return Json(model.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
Я лично, вероятно, также изменил бы подпись, чтобы быть публичной JsonResult
а не ActionResult
(просто мое предпочтение здесь)
Надеюсь, это должно работать для вас. Если вам нужно больше информации, дайте мне знать, и я расширю ответ для вас.