Kendo UI MVC – 基本的ajax绑定

我看到这里提到的例子

所以在我的应用程序中,我尝试以这种方式实现它:

HomeController的

public ActionResult About([DataSourceRequest]DataSourceRequest request) { List listSD = new List(); ... fill the list with objects var v = listSD.ToDataSourceResult(request, sd => new ShortDetail { firstname = sd.firstname, surname = sd.surname, classname = sd.classname}); return Json(v, JsonRequestBehavior.AllowGet) } 

我的模型ShortDetail

 public class ShortDetail { public string firstname { get; set; } public string surname { get; set; } public int classid { get; set; } public string classname { get; set; } public string grade { get; set; } public int studentid { get; set; } public DateTime birthdate { get; set; } public int? indicatorID { get; set; } public string indicatorDescription { get; set; } public List results { get; set; } 

}

在我的View About.cshtml中

  
@(Html.Kendo().Grid().Name("grid").DataSource(ds => ds.Ajax().Read(read => read.Action("About", "Home"))).Pageable())

现在我在浏览器中获得原始json

或者,如果我尝试将模型与视图绑定

About.cshtml

 @model List @using Kendo.Mvc.UI 
@(Html.Kendo().Grid().Name("grid").DataSource(ds => ds.Ajax().Read(read => read.Action("About", "Home"))).Pageable())

HomeController的

  public ActionResult About([DataSourceRequest]DataSourceRequest request) { ... return View(listSD); } 

然后有一个空网格,其中所有列都在模型shortdetails中定义,但ResultMergedWithType属性除外 在此处输入图像描述

我想你可能错过了教程中的一个步骤。 您尚未在任何位置声明列架构(步骤9):

 @(Html.Kendo().Grid() .Name("grid") .DataSource(ds => ds.Ajax() .Read(read => read.Action("About", "Home"))) .Columns(columns => { columns.Bound(c => c.firstname); columns.Bound(c => c.surname); ... } .Pageable()) 

这是将数据绑定到相关列所必需的。

使用json从return Json(v, JsonRequestBehavior.AllowGet) return Json(v.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);更改代码return Json(v.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);

为此,您需要using Kendo.Mvc.Extensions;添加命名空间using Kendo.Mvc.Extensions;

我认为@TechVision是正确的。 我没有测试过,但你可能错误地使用了这种扩展方法。 我有类似的设置,代码的唯一区别是:

 List items = new GetSomeObjects(); return Json(items.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 

如果您在上面的更改后仍然收到错误,那么您可能正确使用扩展方法,我将打开Web调试器并查看请求的来源,看看您是否在代码中的其他位置调用控制器方法,如BeginForm()或其他地方。

我发现了我所缺少的东西。我们必须在Grid <..>()构造函数中指定一个数据源

About.cshtml

  @(Html.Kendo().Grid(Model).Name("grid").DataSource(ds => ds.Ajax().Read(read => read.Action("About", "Home"))).Pageable()) 

HomeController的

  public ActionResult About([DataSourceRequest]DataSourceRequest request) { ... return View(listSD); } 

具有讽刺意味的是,剑道支持团队无法帮助我解决这个问题。

干杯!