好的,我有另一个,我确定我再次错过了一些简单的东西。使用json结果集填充Kendo Grid。通过从kendo下拉列表控件中选择来触发加载。我可以看到数据从我的webapi返回并转换为json结果。但数据不会显示在网格中。
我错过了哪些错误?
以下是添加网格视图的方法:
<div id="messageGridArea">
@Html.Partial("Messages")
</div>
这是下拉列表定义:
@(Html.Kendo().DropDownList()
.Name("importDates")
.CascadeFrom("clients")
.OptionLabel("Select Import Date...")
.DataSource(source => {
source.Read(read =>
{
read.Action("GetDistinctImportDates", "Home").Data("filterImportDates");
})
.ServerFiltering(true);
})
.AutoBind(false)
.Enable(false)
.Events(e => e.Change("OnImportDatesChanged"))
)
以下是网格参数的过滤器:
function filterGridMessages() {
return { importdate: $("#importDates").val() };
}
这是填充网格的事件:
function OnImportDatesChanged(e) {
var grid = $("#clientMessages").data("kendoGrid");
grid.dataSource.read();
}
这是网格定义:
@(Html.Kendo().Grid<Pulse.Data.Model.ImportHeader>()
.Name("clientMessages")
.AutoBind(false)
.Filterable()
.Groupable()
.Sortable()
.Pageable()
.Scrollable()
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(p => p.ImportId))
.ServerOperation(false)
.Read(read =>
read.Action("GetImportMessages", "Home").Data("filterGridMessages")
)
)
.Columns(columns =>
{
columns.Bound("ImportStatus").Title("I").Width("3%");
columns.Bound("ImportTime").Title("Import Time");
columns.Bound("RecordStatus").Title("Status").Filterable(true).Sortable(true).Width("7%");
columns.Bound("RecordState").Title("State").Filterable(true).Sortable(true).Width("7%");
columns.Bound("RecordAction").Title("Action").Filterable(true).Sortable(true).Width("7%");
})
)
最后这里是读取数据的控制器代码:
public JsonResult GetImportMessages(string importdate)
{
IEnumerable<ImportHeader> messages = null;
var msgs = client.GetStringAsync(string.Format("api/importheaders?$filter=RecordSource eq '{0}'", importdate)).Result;
if (!string.IsNullOrWhiteSpace(msgs))
messages = JsonConvert.DeserializeObject<IEnumerable<ImportHeader>>(msgs);
return Json(messages, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:3)
网格需要DataSourceResult。
你应该得到这样的东西(没有测试过):
public JsonResult GetImportMessages([DataSourceRequest] DataSourceRequest request, string importdate)
{
IEnumerable<ImportHeader> messages = null;
var msgs = client.GetStringAsync(string.Format("api/importheaders?$filter=RecordSource eq '{0}'", importdate)).Result;
if (!string.IsNullOrWhiteSpace(msgs))
messages = JsonConvert.DeserializeObject<IEnumerable<ImportHeader>>(msgs);
return Json(messages.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}