これは本当にイライラします。すべてを正しく行っているように感じますが、グリッドには何も表示されません。Fiddler で見ることができるので、データを正しく送り返していることがわかります。これは、機能する私の例の 1 つとまったく同じ形式です。
Fiddler からのデータは次のようになります (JSON は予想どおり、"d" が付いていますが、配列には 200 個のオブジェクトがあり、ここでは 1 つだけを示しています)。
{"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;
}
}
ここでコードの修正を探しているだけではありません。これで何が起こっているのか説明できれば、本当にありがたいです。ドキュメントを読むのに何時間も費やしましたが、これは私のモデルとスキーマが間違っていることに関係していると思われますが、それらのフィールドに関するドキュメントには十分な詳細がありません.
本当に奇妙なことの 1 つは、Ajax 呼び出しを実行すると、どちらのコールバック関数も実行されないことです。エラーと成功の両方に対するコールバックがあることがわかります。どちらも実行されません。Ajax 呼び出しが行われ、データが返されていることがわかります。これらの関数のいずれかが実行されることを期待します-つまり、成功またはエラーのいずれかでなければなりませんよね?