我从Telerik开始并遇到了这个问题。网格被解析到预期的位置:localhost:.../Dashboard/Dashboard
不会抛出任何异常,但它是EMPTY。 Json正确地从我的ViewModel中获取数据,并在localhost:.../Dashboard/ChartTable
中正确返回。出于某种原因,View不会读取这个Json。我该怎么做呢?
修改
我将Telerik颠倒过来寻找错误,以下建议只是强调了我在控制器中查看的代码是正常的。问题是在一个ViewModel字段中(这里没有在示例代码中提到)我的Json返回NaN - 这在Json中无效。所以我不应该说Json正确地选择了日期。得到这个错误是一个非常好的学习。
查看
@model IEnumerable<PriceBench.ViewModels.CompsSnapshotVM>
<div id="div1">
@(Html.Kendo().Grid(Model)
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Name).Width(200).Title("Name");
columns.Bound(p => p.MatchCount).Width(300).Title("Count");
})
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Read(read => read.Action("ChartTable", "Dashboard"))
)
)
</div>
控制器:
public ActionResult ChartTable([DataSourceRequest]DataSourceRequest request)
{
DataSourceResult result = _dashRepo.GetCompsSnapshotVM().ToDataSourceResult(request);
return Json(result);
}
public ActionResult Dashboard()
{
return View();
}
答案 0 :(得分:1)
看起来您正在将网格绑定到View的模型并尝试同时使用AJAX ..只需将网格更改为此。
@(Html.Kendo().Grid<PriceBench.ViewModels.CompsSnapshotVM>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Name).Width(200).Title("Name");
columns.Bound(p => p.MatchCount).Width(300).Title("Count");
})
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Read(read => read.Action("ChartTable", "Dashboard"))
)
)
它只是告诉网格模型类型是什么。或者在第一次调用视图时传入要绑定网格的数据。
您可能也希望从数据源设置中删除.ServerOperation(false)
部分
编辑。
尝试在返回时添加JsonRequestBehavior.AllowGet
。
public ActionResult ChartTable([DataSourceRequest]DataSourceRequest request)
{
var result = _dashRepo.GetCompsSnapshotVM().ToDataSourceResult(request);
return Json(result, JsonRequestBehavior.AllowGet);
}
public ActionResult Dashboard()
{
return View();
}
答案 1 :(得分:1)
在ASP.NET MVC中使用kendo网格时,我们有两种选择。
AutoBind():如果设置为false,则窗口小部件在初始化期间不会绑定到数据源。在这种情况下,数据绑定将在触发数据源的更改事件时发生。默认情况下,窗口小部件将绑定到配置中指定的数据源。
GetType(HttpVerbs.Get):如果你想在HTTP GET上获取数据。
所以你的网格将是这样的。
@(Html.Kendo().Grid<PriceBench.ViewModels.CompsSnapshotVM>()
.Name("grid")
.AutoBind() //if you are using AutoBind
//If you want to implement Pager
.Pageable(pager => pager
.PageSizes(true)
.Info(true)
.PreviousNext(true)
)
.Columns(columns =>
{
columns.Bound(p => p.Name).Width(200).Title("Name");
columns.Bound(p => p.MatchCount).Width(300).Title("Count");
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.ServerOperation(true)
.Read(read => read.Action("ChartTable", "Dashboard"))
)
)
如果你想使用HTTP GET,它将是这样的。
.Read(read => read.Action("ChartTable", "Dashboard").Type(HttpVerbs.Get))
我不确定你是如何调用绑定此网格的。如果你能告诉我,我可以根据这个建议你。
REF
让我知道它对你有用。
这个网格对我有用:
@(Html.Kendo().Grid<UserViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Username).Width(150).Title("User Name");
columns.Bound(p => p.Role).Width(100).ClientTemplate("#=Role.RoleName#").Filterable(false).Width(80).Sortable(false);
})
.Pageable()
.Sortable()
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Model(model =>
{
model.Id(p => p.ID);
model.Field(p => p.Role).DefaultValue(ViewData["defaultCategory"] as UserRole);
}
)
.Read(read => read.Action("GetAllUser", "Administration"))
)
)
答案 2 :(得分:0)
根据编辑,问题是Json在其中一个ViewModel字段中有一个NaN。 Json中不允许使用NaN,它会阻止Telerik正确显示视图。