Kendo UI Grid 无法对页面加载进行 Ajax 调用
KendoUI Grid fails to make Ajax call on the Page Load
我正在为 KendoUI 网格制作演示页面,我正在按照以下 link 中的示例进行操作,几乎与 "Verbatim".[=14= 一样]
http://demos.telerik.com/aspnet-mvc/grid/index
我不确定我做错了什么,但 Grid 似乎没有进行它应该进行的第一个 Ajax 调用。我对 MVC 和 Kendo 都很陌生,但不确定问题是否出在任何特定部分。让我从一些代码片段开始。我的 Index.CsHTMl 如下所示:
<!DOCTYPE html>
@using (Html.BeginForm())
{
<div id="clientsDb">
@(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
.Name("employeeGrid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Width(140);
columns.Bound(c => c.FirstName).Width(190);
columns.Bound(c => c.LastName);
})
.HtmlAttributes(new {style = "height: 380px;"})
.Scrollable()
.Groupable()
.Sortable()
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ReadEmployee", "EmployeeGrid"))
)
)
</div>
}
<style scoped>
#clientsDb {
width: 952px;
height: 396px;
margin: 20px auto 0;
padding: 51px 4px 0 4px;
background: url('@Url.Content("~/content/web/grid/clientsDb.png")') no-repeat 0 0;
}
</style>
我的控制器如下所示:
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult ReadEmployee([DataSourceRequest]DataSourceRequest request)
{
return Json(GetEmployees().ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
public static IEnumerable<Core.Domain.Employee> GetEmployees()
{
return new List<Core.Domain.Employee>
{
new Core.Domain.Employee
{
Id = 1,
FirstName = "Someone",
LastName = "Else"
},
new Core.Domain.Employee
{
Id = 2,
FirstName = "FirstName",
LastName = "LastName"
}
};
}
几乎复制了演示中的行为:
- 加载 Index.cshtml
时,网格没有发出 Ajax 请求
- 当我单独调用 ReadEmployee ActionMethod 时,它 return Json 正确。此外,当我单击 "Empty" 网格上的任何按钮时,它会加载相同的 JSON.
- 与示例不同的是,我添加了 BeginForm()。它不工作 with/without BeginForm。
有什么想法吗?
默认情况下,读取操作是 POST 而不是 GET。因此,您需要从读取操作中删除 HttpGet Verb 或添加
.Read(read => read.Action("ReadEmployee", "EmployeeGrid").Type(HttpVerbs.Get))
到读取方法。
希望这对您有所帮助。
对于此类问题,我喜欢使用 Fiddler 检查正在发送的请求,并确保我在适当的地方期待 POST、GET、DELETE 等。
我正在为 KendoUI 网格制作演示页面,我正在按照以下 link 中的示例进行操作,几乎与 "Verbatim".[=14= 一样]
http://demos.telerik.com/aspnet-mvc/grid/index
我不确定我做错了什么,但 Grid 似乎没有进行它应该进行的第一个 Ajax 调用。我对 MVC 和 Kendo 都很陌生,但不确定问题是否出在任何特定部分。让我从一些代码片段开始。我的 Index.CsHTMl 如下所示:
<!DOCTYPE html>
@using (Html.BeginForm())
{
<div id="clientsDb">
@(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
.Name("employeeGrid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Width(140);
columns.Bound(c => c.FirstName).Width(190);
columns.Bound(c => c.LastName);
})
.HtmlAttributes(new {style = "height: 380px;"})
.Scrollable()
.Groupable()
.Sortable()
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ReadEmployee", "EmployeeGrid"))
)
)
</div>
}
<style scoped>
#clientsDb {
width: 952px;
height: 396px;
margin: 20px auto 0;
padding: 51px 4px 0 4px;
background: url('@Url.Content("~/content/web/grid/clientsDb.png")') no-repeat 0 0;
}
</style>
我的控制器如下所示:
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult ReadEmployee([DataSourceRequest]DataSourceRequest request)
{
return Json(GetEmployees().ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
public static IEnumerable<Core.Domain.Employee> GetEmployees()
{
return new List<Core.Domain.Employee>
{
new Core.Domain.Employee
{
Id = 1,
FirstName = "Someone",
LastName = "Else"
},
new Core.Domain.Employee
{
Id = 2,
FirstName = "FirstName",
LastName = "LastName"
}
};
}
几乎复制了演示中的行为:
- 加载 Index.cshtml 时,网格没有发出 Ajax 请求
- 当我单独调用 ReadEmployee ActionMethod 时,它 return Json 正确。此外,当我单击 "Empty" 网格上的任何按钮时,它会加载相同的 JSON.
- 与示例不同的是,我添加了 BeginForm()。它不工作 with/without BeginForm。
有什么想法吗?
默认情况下,读取操作是 POST 而不是 GET。因此,您需要从读取操作中删除 HttpGet Verb 或添加
.Read(read => read.Action("ReadEmployee", "EmployeeGrid").Type(HttpVerbs.Get))
到读取方法。
希望这对您有所帮助。
对于此类问题,我喜欢使用 Fiddler 检查正在发送的请求,并确保我在适当的地方期待 POST、GET、DELETE 等。