剑道UI网格获胜';t从ajax数据源MVC填充

本文关键字:ajax 数据源 MVC 填充 网格 UI 获胜 剑道 | 更新日期: 2023-09-27 17:58:58

我正试图用ajax调用中的模型填充kendo网格。这是我的剑道Ui网格与Html。.cshtml 中的帮助程序

<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);           
    }

我有所有的推荐信。我可以从服务器端进行填充,所以当我编写网格(模型)时,会填充网格,但我不希望这样。

剑道UI网格获胜';t从ajax数据源MVC填充

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

将属性autobind设置为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();

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