Jquery 用Ajax结果填充剑道网格
我希望能够使用ajax调用的结果来决定我将填充哪个剑道网格。如果我只收到数组中的一个项目,我想填充一个网格,否则我有另一个网格来容纳多个项目 我的jQueryJquery 用Ajax结果填充剑道网格,jquery,asp.net-mvc,asp.net-mvc-4,kendo-ui,kendo-grid,Jquery,Asp.net Mvc,Asp.net Mvc 4,Kendo Ui,Kendo Grid,我希望能够使用ajax调用的结果来决定我将填充哪个剑道网格。如果我只收到数组中的一个项目,我想填充一个网格,否则我有另一个网格来容纳多个项目 我的jQuery $.ajax({ type: "POST", dataType: "json", url: 'Item/GetItems/', data: { number: number }, success: function (data) {
$.ajax({
type: "POST",
dataType: "json",
url: 'Item/GetItems/',
data: { number: number },
success: function (data) {
if (data.length == 1) {
var sGrid = $("#SingleGrid").data("kendoGrid").dataSource.data(data);
//I´ve also tried this
//sGrid.refresh();
}
else {
var mGrid = $("#MultipleGrid").data("kendoGrid").dataSource.data(data);
//I´ve also tried this
//mGrid .refresh();
}
},
error: function () {
}
});
function TestGrid() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
dataType: "json",
url: 'Item/GetItems/'
}
},
schema: {
data: function (response) {
// Here the Total is always correct
return response.Total;
}
}
});
dataSource.fetch(function () {
var kendoGrid;
var data = this.data();
//Here the data does not include my Total
alert(data);
if (data.length == 1) {
kendoGrid = $("#SingleGrid").data("kendoGrid");
} else {
kendoGrid = $("#MultipleGrid").data("kendoGrid");
}
kendoGrid.setDataSource(dataSource);
kendoGrid.refresh();
});
}
我的控制器操作
public ActionResult GetItems([DataSourceRequest] DataSourceRequest request, string number)
{
var items = _idg.GetItems(number);
return Json(items.ToDataSourceResult(request, ModelState));
}
function TestGrid() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
dataType: "json",
url: 'Item/GetItems/'
}
},
schema: {
data: function (response) {
// Here the Total is always correct
return response.Total;
}
}
});
dataSource.fetch(function () {
var kendoGrid;
var data = this.data();
//Here the data does not include my Total
alert(data);
if (data.length == 1) {
kendoGrid = $("#SingleGrid").data("kendoGrid");
} else {
kendoGrid = $("#MultipleGrid").data("kendoGrid");
}
kendoGrid.setDataSource(dataSource);
kendoGrid.refresh();
});
}
我一直在监视Firebug,它没有显示任何错误。我试图通过决定填充一个网格来阻止对服务器的第二次调用。有没有一种方法可以像这样强制数据源刷新客户端?(不调用数据源上的read函数,该函数将在第二次调用服务器)
编辑
function TestGrid() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
dataType: "json",
url: 'Item/GetItems/'
}
},
schema: {
data: function (response) {
// Here the Total is always correct
return response.Total;
}
}
});
dataSource.fetch(function () {
var kendoGrid;
var data = this.data();
//Here the data does not include my Total
alert(data);
if (data.length == 1) {
kendoGrid = $("#SingleGrid").data("kendoGrid");
} else {
kendoGrid = $("#MultipleGrid").data("kendoGrid");
}
kendoGrid.setDataSource(dataSource);
kendoGrid.refresh();
});
}
从我上面的例子来看,我似乎无法从这个.data()得到总数。当我调试Firebug时,我可以看到总数总是正确的。有什么想法吗?您可以填充剑道数据源的新实例,加载数据,然后根据结果进行操作,设置网格的数据源。也许是这样的:
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
dataType: "json",
url: 'Item/GetItems/',
data: { number: number },
}
}
});
然后从服务器获取数据并对结果执行操作:
dataSource.fetch(function() {
var data = this.data();
var kendoGrid;
if (data.length == 1) {
kendoGrid = $("#SingleGrid").data("kendoGrid");
} else {
kendoGrid = $("#MultipleGrid").data("kendoGrid");
}
// Replace the grids data source with our new populated data source
kendoGrid.setDataSource(dataSource);
kendoGrid.refresh();
});
您可以填充剑道数据源的新实例,加载数据,然后对结果执行操作,设置网格的数据源。也许是这样的:
var dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
dataType: "json",
url: 'Item/GetItems/',
data: { number: number },
}
}
});
然后从服务器获取数据并对结果执行操作:
dataSource.fetch(function() {
var data = this.data();
var kendoGrid;
if (data.length == 1) {
kendoGrid = $("#SingleGrid").data("kendoGrid");
} else {
kendoGrid = $("#MultipleGrid").data("kendoGrid");
}
// Replace the grids data source with our new populated data source
kendoGrid.setDataSource(dataSource);
kendoGrid.refresh();
});
你也可以这样做
$("#grid").kendoGrid({
dataSource: {
transport: {
read: {
url: "http://localhost:13073/home/KendoGriddata",
dataType: "json",
type: "Post",
data: function () {
var dt = { MultipleSearchText: 'rikin' };
return dt;
}
}
},
pageSize: 5
});
你也可以这样做
$("#grid").kendoGrid({
dataSource: {
transport: {
read: {
url: "http://localhost:13073/home/KendoGriddata",
dataType: "json",
type: "Post",
data: function () {
var dt = { MultipleSearchText: 'rikin' };
return dt;
}
}
},
pageSize: 5
});
谢谢你的回答@boniestlawyer,我按照你的建议实现了,但是我的网格仍然没有显示数据。我可以在Firebug中看到数据正在从控制器传递,但没有出现。当我计算新数据源中的元素时(使用total()函数),我总是不接收任何元素,就好像数据源是空的一样。也许我使用了一个错误的函数来计算数据源,或者我填充数据源的方式不正确。有什么想法吗?:)我怀疑这可能与进入浏览器的数据有关。尝试向剑道数据源添加一个schema->data函数,如下所示:,并调试该函数以检查您得到的响应。这可能与您所建议的一样,来自服务器的数据以某种方式没有正确通过,或者至少没有正确地进行数据绑定。假设数据源总是以DataSourceResult的形式从控制器读取数据,对吗?(如我的示例所示)它似乎是正确的。kendo数据源的javascript端不一定要绑定到DataSourceResult,它可以从几乎所有的JSON数据中读取,它只是帮助处理数据,这样您就不需要在客户端执行太多的管道操作。现在我回到这个问题上来。如何计算数据源中的元素?在上面的示例中,您将使用什么来返回数据源的长度?感谢您的回答@boniestlawyer,我按照您的建议实现了,但是我的网格仍然没有显示数据。我可以在Firebug中看到数据正在从控制器传递,但没有出现。当我计算新数据源中的元素时(使用total()函数),我总是不接收任何元素,就好像数据源是空的一样。也许我使用了一个错误的函数来计算数据源,或者我填充数据源的方式不正确。有什么想法吗?:)我怀疑这可能与进入浏览器的数据有关。尝试向剑道数据源添加一个schema->data函数,如下所示:,并调试该函数以检查您得到的响应。这可能与您所建议的一样,来自服务器的数据以某种方式没有正确通过,或者至少没有正确地进行数据绑定。假设数据源总是以DataSourceResult的形式从控制器读取数据,对吗?(如我的示例所示)它似乎是正确的。kendo数据源的javascript端不一定要绑定到DataSourceResult,它可以从几乎所有的JSON数据中读取,它只是帮助处理数据,这样您就不需要在客户端执行太多的管道操作。现在我回到这个问题上来。如何计算数据源中的元素?在上面的示例中,您将使用什么来返回数据源的长度?