【发布时间】:2013-08-29 16:01:42
【问题描述】:
这真的让我很沮丧。我觉得我做的一切都是正确的,但我的网格不会显示任何东西。我知道我正确地发回了数据,因为我可以在 Fiddler 中看到它,而且它的格式与我的一个有效示例完全相同。
来自 Fiddler 的数据看起来像这样(JSON,正如预期的那样,带有“d”,但数组中有 200 个对象,这里我只显示一个。)
{"d":
[{"__type":"DisputeProjectManagerModel.DISP_PROJECT_NAME_MASTER",
"PROJECT_ID_NUMBER":241,
"PROJECT_NAME":"AT\u0026T Settlement - Stake date payment",
"CATEGORY":null,
"CONTRIBUTION":"N",
"WIN_RATE":"N",
"SETTLEMENT":"N",
"DESCRIPTION":null,
"JUSTIFICATION":null,
"ACTIVE":"N",
"MODIFIED_USER":"SYSTEM",
"MODIFIED_DATE":"\/Date(1377744633000)\/",
"EntityState":2,
"EntityKey":{"EntitySetName":"DISP_PROJECT_NAME_MASTER","EntityContainerName":"DisputeProjectManagerEntities","EntityKeyValues":[{"Key":"PROJECT_ID_NUMBER","Value":241}],
"IsTemporary":false}
}]
}
这是我的网格的代码。这是我尝试的第 50 个版本。
$(document).ready(function () {
setupGrid();
});
function setupGrid() {
alert("click OK to make Ajax call");
$("#projectManagerGrid").kendoGrid({
columns: ["PROJECT_ID_NUMBER", "PROJECT_NAME", "CATEGORY", "CONTRIBUTION", "WIN_RATE", "SETTLEMENT", "DESCRIPTION", "JUSTIFICATION", "ACTIVE", "MODIFIED_USER", "MODIFIED_DATE"],
dataSource: {
type: "odata",
transport: {
read: {
type: "POST",
url: "/special_pages/DisputeProjectManager.aspx/getProjects",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) { alert('WORKED!'); },
error: function (xhr, textStatus, errorThrown) { handleAjaxError(xhr, textStatus, errorThrown); }
},
parameterMap: function (data, type) {
return kendo.stringify(data);
}
}
},
schema: {
data: "d",
columns: ["PROJECT_ID_NUMBER", "PROJECT_NAME", "CATEGORY", "CONTRIBUTION", "WIN_RATE", "SETTLEMENT", "DESCRIPTION", "JUSTIFICATION", "ACTIVE", "MODIFIED_USER", "MODIFIED_DATE"],
model: {
id: "PROJECT_ID_NUMBER",
fields: {
"PROJECT_ID_NUMBER": { type: "number", editable: false },
"PROJECT_NAME": { type: "string", editable: true },
"CATEGORY": { type: "string", editable: true },
"CONTRIBUTION": { type: "string", editable: true },
"WIN_RATE": { type: "string", editable: true },
"SETTLEMENT": { type: "string", editable: true },
"DESCRIPTION": { type: "string", editable: true },
"JUSTIFICATION": { type: "string", editable: true },
"ACTIVE": { type: "string", editable: true },
"MODIFIED_USER": { type: "string", editable: false },
"MODIFIED_DATE": { type: "date", editable: false }
}
}
},
editable: {
update: true,
create: true,
destroy: false
},
toolbar: ["create", "save", "cancel"]
});
}
这是我的页面方法,效果很好:
[WebMethod]
public static List<DISP_PROJECT_NAME_MASTER> getProjects() {
try {
using (DisputeProjectManagerEntities ctx = new DisputeProjectManagerEntities()) {
var q = (from e in ctx.DISP_PROJECT_NAME_MASTER orderby e.MODIFIED_DATE descending select e);
return q.ToList<DISP_PROJECT_NAME_MASTER>();
}
} catch {
return null;
}
}
我不只是在这里寻找代码修复。如果您能解释这是怎么回事,我将不胜感激。我花了很多时间阅读文档,我怀疑这与我的模型和架构错误有关,但是关于这些字段的文档没有足够的细节。
一个非常奇怪的事情是,当我运行 Ajax 调用时,没有一个回调函数运行。你可以看到我有一个错误和成功的回调——这些都没有运行。我可以看到正在进行的 Ajax 调用和返回的数据。我希望这些功能中的一个或另一个能够运行 - 我的意思是,它必须是成功或错误,对吧?
【问题讨论】:
-
schema定义不应该是dataSource定义的一部分吗?即不是schema配置应该嵌套在dataSource配置下吗? (我希望这是有道理的。) -
是的!请把它作为一个答案,这样我就可以给你功劳了。谢谢!
-
为了隔离问题,您是否尝试过通过复制从 Fiddler 返回的数据来绕过 AJAX 调用,并将其直接绑定到 dataSource,而不是使用 AJAX?
-
抱歉,我们在那里重叠了 cmets。 :) 很高兴它成功了。
-
马克,谢谢,是的,我在这里的一些问题中看到了这种技术。很好的调试技巧,谢谢提醒!
标签: json kendo-ui kendo-grid