Kendo ui 网格下拉编辑器不加载数据
Kendo ui grid dropdown editor does not load data
无法将数据加载到 kendo 下拉列表。它从后端获取数据,但列表为空。后端看起来像:
[HttpPost]
public ActionResult GetCities(DataSourceRequest command)
{
var cityModel = _uow.Cities.GetAll().ToList();
var gridModel = new DataSourceResult
{
Data = cityModel.Select(PrepareCityModelForList),
Total = cityModel.Count
};
return Json(gridModel);
}
前端
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "Id",
fields: {
Name: { editable: true, type: "string" },
City: { defaultValue: { CityId: 0, CityName: "Select City" } },
Address: { editable: true, type: "string" },
Tel: { editable: true, type: "string" },
Fax: { editable: true, type: "string" },
}
}
},
......
columns: [...
{
field: "City.Name",
title: "City",
editor: cityDropDownEditor,
template: "#=City.CityName#",
width: 200
}
....
function cityDropDownEditor(container, options) {
$('<input required data-text-field="CityName" data-value-field="CityId" data-bind="value:' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
autoBind: false,
dataSource: {
transport: {
read:
{
url: "@Html.Raw(Url.Action("GetCities", "Contact"))",
type: "POST",
dataType: "json"
}
}
}
});
}
城市模型有 CityName(字符串)、CityId(整数)和 CityPostalCode(字符串)字段。控制台中唯一的错误是 "Uncaught TypeError: e.slice is not a function"
更新* PrepareCityModelForList 的代码
protected virtual CompanyCityModel PrepareCityModelForList(City city)
{
return new CompanyCityModel()
{
CityId = city.Id,
CityName = city.Name,
PostalCode = city.PostalCode
};
}
更新*:返回JSON
{"ExtraData":null,"Data":[{"CityId":3,"CityName":"Minsk","PostalCode":"220000"},{"CityId":4,"CityName":"Brest","PostalCode":"224000"},{"CityId":5,"CityName":"Vitebsk","PostalCode":"210000"},{"CityId":6,"CityName":"Gomel","PostalCode":"246000"}],"Errors":null,"Total":4}
问题出在 json,已被 ajax 解决。您必须确保您的 json 很简单,例如:
{[
{"CityId":3,"CityName":"Minsk","PostalCode":"220000"},
"CityId":4,"CityName":"Brest","PostalCode":"224000"},
"CityId":5,"CityName":"Vitebsk","PostalCode":"210000"},
"CityId":6,"CityName":"Gomel","PostalCode":"246000"}
]}
无法将数据加载到 kendo 下拉列表。它从后端获取数据,但列表为空。后端看起来像:
[HttpPost]
public ActionResult GetCities(DataSourceRequest command)
{
var cityModel = _uow.Cities.GetAll().ToList();
var gridModel = new DataSourceResult
{
Data = cityModel.Select(PrepareCityModelForList),
Total = cityModel.Count
};
return Json(gridModel);
}
前端
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "Id",
fields: {
Name: { editable: true, type: "string" },
City: { defaultValue: { CityId: 0, CityName: "Select City" } },
Address: { editable: true, type: "string" },
Tel: { editable: true, type: "string" },
Fax: { editable: true, type: "string" },
}
}
},
......
columns: [...
{
field: "City.Name",
title: "City",
editor: cityDropDownEditor,
template: "#=City.CityName#",
width: 200
}
....
function cityDropDownEditor(container, options) {
$('<input required data-text-field="CityName" data-value-field="CityId" data-bind="value:' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
autoBind: false,
dataSource: {
transport: {
read:
{
url: "@Html.Raw(Url.Action("GetCities", "Contact"))",
type: "POST",
dataType: "json"
}
}
}
});
}
城市模型有 CityName(字符串)、CityId(整数)和 CityPostalCode(字符串)字段。控制台中唯一的错误是 "Uncaught TypeError: e.slice is not a function"
更新* PrepareCityModelForList 的代码
protected virtual CompanyCityModel PrepareCityModelForList(City city)
{
return new CompanyCityModel()
{
CityId = city.Id,
CityName = city.Name,
PostalCode = city.PostalCode
};
}
更新*:返回JSON
{"ExtraData":null,"Data":[{"CityId":3,"CityName":"Minsk","PostalCode":"220000"},{"CityId":4,"CityName":"Brest","PostalCode":"224000"},{"CityId":5,"CityName":"Vitebsk","PostalCode":"210000"},{"CityId":6,"CityName":"Gomel","PostalCode":"246000"}],"Errors":null,"Total":4}
问题出在 json,已被 ajax 解决。您必须确保您的 json 很简单,例如:
{[
{"CityId":3,"CityName":"Minsk","PostalCode":"220000"},
"CityId":4,"CityName":"Brest","PostalCode":"224000"},
"CityId":5,"CityName":"Vitebsk","PostalCode":"210000"},
"CityId":6,"CityName":"Gomel","PostalCode":"246000"}
]}