我希望能夠使用ajax調用的結果來決定哪個Kendo網格將填充。如果我只接收一個數組中的項目,我想填充一個網格,否則我有多個項目的另一個網格。使用Ajax結果填充Kendo網格
我的jQuery
$.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() {
}
});
我的控制器動作
public ActionResult GetItems([DataSourceRequest] DataSourceRequest request, string number)
{
var items = _idg.GetItems(number);
return Json(items.ToDataSourceResult(request, ModelState));
}
從來就一直在監測螢火蟲,它顯示沒有錯誤。我試圖通過決定填充其中一個網格來阻止對服務器的第二次調用。有沒有像這個客戶端的方式強制dataSource刷新? (不調用DataSource的讀取功能,將調用第二次服務器)編輯後的########
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();
});
}
從我上面的例子
######我似乎無法達到this.data()的總數。當我用Firebug進行調試時,我可以看到總數總是正確的。有任何想法嗎?
感謝您的回答@boniestlawyer,我按照您的建議實施,但我的網格仍未顯示數據。我可以在Firebug中看到數據正在從控制器傳遞,但沒有出現。當我計算新數據源中的元素(使用total()函數)時,我總是收不到數據源,就好像數據源是空的。也許我正在使用錯誤的函數來計算dataSource,或者我可能沒有以正確的方式填充dataSource。有任何想法嗎? :) – gardarvalur
我懷疑這將與數據傳遞到瀏覽器有關。嘗試像下面這樣將模式 - >數據函數添加到您的kendo數據源中:http://docs.kendoui.com/api/framework/datasource#configuration-schema,並調試該函數以檢查您獲得的響應。 – boniestlawyer
這可能就像你在暗示的那樣,來自服務器的數據在某種程度上不能正確地通過,或者至少沒有正確的數據綁定。我是否正確地假設dataSource始終以DataSourceResult的形式從控制器讀取數據? (就像我的例子所示) – gardarvalur