繁体   English   中英

Kendo UI MVC-基本的Ajax绑定

[英]Kendo UI MVC - basic ajax binding

我看到这里提到的例子

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

家庭控制器

public ActionResult About([DataSourceRequest]DataSourceRequest request)
    {
       List<ShortDetail> listSD = new List<ShortDetail>();
       ... 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<ResultMergedWithType> results { get; set; }

}

在我的View About.cshtml中

 <div class="col-md-12 table-responsive" id="mapsDiv">
   @(Html.Kendo().Grid<KendoExample.Models.ShortDetail>().Name("grid").DataSource(ds => ds.Ajax().Read(read => read.Action("About", "Home"))).Pageable())


</div>

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

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

About.cshtml

@model List<KendoExample.Models.ShortDetail>
@using Kendo.Mvc.UI

 <div class="col-md-12 table-responsive" id="mapsDiv">
  @(Html.Kendo().Grid<KendoExample.Models.ShortDetail>().Name("grid").DataSource(ds => ds.Ajax().Read(read => read.Action("About", "Home"))).Pageable())


</div>

家庭控制器

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

那么将有一个空网格,其中所有模型模型详细信息中定义的列都除外,除了ResultMergedWithType属性 在此处输入图片说明

我认为您可能错过了本教程中的步骤。 您尚未在任何地方声明您的列模式(步骤9):

@(Html.Kendo().Grid<KendoExample.Models.ShortDetail>()
    .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, JsonRequestBehavior.AllowGet)return Json(v.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);

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

我认为@TechVision是正确的。 我没有测试过,但是您可能没有正确使用该扩展方法。 我有一个类似的设置,并且代码中的唯一区别是:

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

如果在上述更改后仍然出现错误,则可能是您正确使用了扩展方法,我将打开Web调试器,查看请求的源,看看是否在代码中其他地方调用控制器方法,如BeginForm()或其他地方。

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

About.cshtml

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

家庭控制器

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

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

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM