【问题标题】:Kendo UI grid won't populate from ajax dataSource MVCKendo UI 网格不会从 ajax 数据源 MVC 填充
【发布时间】:2014-04-17 15:50:38
【问题描述】:

我正在尝试使用来自 ajax 调用的模型填充剑道网格。这是我的 Kendo Ui Grid,带有 .cshtml 中的 Html.Helpers

<div id="grid">
@(Html.Kendo().Grid<OtpadModel.AddressObject>()
.Name("Grid")
.Pageable()
.Sortable()
.Selectable(sel =>
{
        sel.Mode(GridSelectionMode.Single);
})
.Filterable()
.Scrollable()
.Events(events => events.Change("onChange"))
.Groupable()
.DataSource(dataSource => dataSource
    .Ajax()
    .Read(read => read.Action("GetAddressObjects", "AddressObject"))
    .Model(model => model.Id(p => p.ID)))
.Columns(columns => {
    columns.Bound(p => p.KeyNumber).Title("Šifra objekta");
    columns.Bound(p => p.ObjectType.Type).Title("Vrsta objekta");
    columns.Bound(p => p.ObjectOwners.FirstOrDefault().Owner.Name).Title("Ime vlasnika");
    columns.Bound(p => p.ObjectOwners.FirstOrDefault().Owner.Surname).Title("Prezime vlasnika");
    columns.Bound(p => p.Address.Street).Title("Ulica");
    columns.Bound(p => p.Address.Number).Title("Broj");
    columns.Bound(p => p.Address.City.Name).Title("Grad");
    columns.Bound(p => p.ResidentalArea).Title("Površina");
    columns.Bound(p => p.ResidentsNumber).Title("Članovi");
    columns.Bound(p => p.TuristBedsNumber).Title("Turistički kreveti");
})   
)
</div>

我的控制器方法实现是:

    public ActionResult GetAddressObjects([DataSourceRequest] DataSourceRequest request)
    {
        IEnumerable<AddressObject> addressObjects = unitOfWork.AddressObjectRepository.Get(includeProperties: "ObjectType, Address, ObjectOwners");
        DataSourceResult result = addressObjects.ToDataSourceResult(request);
        return Json(result, JsonRequestBehavior.AllowGet);           
    }

我有所有的参考。我可以从我的服务器端填充,所以当我写 Grid(Model) 时,网格被填充了,但我不想要这个。

【问题讨论】:

  • 您是否尝试过在 Fiddler 中调试以查看您的操作是否被调用?还可以尝试添加错误处理程序 .Events(e => e.Error("error_handler")) 并创建 javascript 函数。
  • 是的,我有。正在调用我的操作,并且控制器中的地址对象和结果变量已正确填充。
  • "所以当我写 Grid(Model) 时,网格被填充了,但我不想要这个。"我很困惑这是什么问题?
  • 问题是:当我从传递给视图的模型填充我的网格时 - Viwe(myPopulatedModel) 然后 Grid(Model) 在我的视图中填充它。由于某些限制,我不能拥有服务器端填充,因此需要使用 Ajax 在客户端填充。这不起作用,即使我的控制器中的操作被调用和填充
  • 你确定read.Action("GetAddressObjects", "AddressObject")是正确的吗?

标签: c# asp.net-mvc-4 kendo-ui kendo-grid


【解决方案1】:

感谢大家的大力帮助。问题是我的一个类有一个虚拟属性,问题是虚拟关键字。你不能有任何虚拟的东西,总是映射到 ViewModel。但意外的是,我的 ViewModel 中的一个属性是虚拟的(复制、粘贴错误)。

【讨论】:

    【解决方案2】:

    将属性自动绑定设置为 false。

    @(Html.Kendo().Grid<OtpadModel.AddressObject>()
    .Name("Grid")
    .Pageable()
    .Sortable()
    .Selectable(sel =>
    {
            sel.Mode(GridSelectionMode.Single);
    })
    .AutoBind(false)
    .Filterable()
    .Scrollable()
    .Events(events => events.Change("onChange"))
    .Groupable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("GetAddressObjects", "AddressObject"))
        .Model(model => model.Id(p => p.ID)))
    .Columns(columns => {
        columns.Bound(p => p.KeyNumber).Title("Šifra objekta");
        columns.Bound(p => p.ObjectType.Type).Title("Vrsta objekta");
        columns.Bound(p => p.ObjectOwners.FirstOrDefault().Owner.Name).Title("Ime vlasnika");
        columns.Bound(p => p.ObjectOwners.FirstOrDefault().Owner.Surname).Title("Prezime vlasnika");
        columns.Bound(p => p.Address.Street).Title("Ulica");
        columns.Bound(p => p.Address.Number).Title("Broj");
        columns.Bound(p => p.Address.City.Name).Title("Grad");
        columns.Bound(p => p.ResidentalArea).Title("Površina");
        columns.Bound(p => p.ResidentsNumber).Title("Članovi");
        columns.Bound(p => p.TuristBedsNumber).Title("Turistički kreveti");
    })   
    

    然后,在您的文档就绪或其他页面事件中,执行以下代码:

    var grid = $("#yourgridElementName").data("kendoGrid");
    grid.dataSource.read();
    

    希望这会有所帮助。祝你好运。

    【讨论】:

    • 你以前有过这项工作吗?我的意思是,这是您以前遇到过的问题吗?
    • 与您的问题不完全相同,但我目前确实按照我使用 ajax 绑定向您解释的确切方式绑定了一些网格。将 autobind 设置为 false 后,将不会调用服务器。当您调用“grid.dataSource.read()”时,将按照您的网格读取操作中的定义进行调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2014-02-27
    • 2013-08-08
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多