我在标准的C#ASP.NET MVC控制器中有以下代码。
public JsonResult ReadTeachers()
{
return Json(ReadTeacherData(), JsonRequestBehavior.AllowGet);
}
public void UpdateTeachers(IEnumerable<Teacher> updatedTeachers)
{
// this is never called
}
我正在尝试使用KendoGrid调用此控制器。这是我网格的代码。
$("#teachers").kendoGrid({
dataSource: {
type: "json",
transport: {
read: {
url: '@Url.Action("ReadTeachers", "EducationPortal")',
dataType: "json"
},
update: {
url: '@Url.Action("UpdateTeachers", "EducationPortal")',
dataType: "json"
},
parameterMap: function (options, operation) {
if (operation !== "read" && options.models) {
return { models: kendo.stringify(options.models) };
}
}
},
batch: true,
schema: {
model: {
id: "TeacherId",
fields: {
TeacherId: { type: "number" },
FullName: { type: "string" },
IsHeadmaster: { type: "boolean" }
}
}
}
},
toolbar: ["create", "save"],
columns: [
{ field: "FullName", title: "Teacher" },
{ field: "IsHeadmaster", title: "Is a Headmaster?", width: "120px" },
{ command: ["destroy"], title: " ", width: "85px" }],
editable: true
});
我从Kendo的examples改编了这段代码。问题是,从不调用UpdateTeachers方法。我怀疑问题出在parameterMap函数中,因为这是我最不了解的代码部分。
答案 0 :(得分:1)
而不是使用
public void UpdateTeachers(IEnumerable<Teacher> updatedTeachers)
{
// this is never called
}
使用
public JsonResult UpdateTeachers(string models)
{
//Deserialize to object
IList<Teacher> teachers= new JavaScriptSerializer().Deserialize<IList<Teacher>>(models);
return Json(Teacher)
}
请注意,parameterMap:function()以序列化字符串格式发送名为 models 的更新数据,因此您应该使用&#34; models&#34;作为动作中的参数名称
我希望这会对你有所帮助
答案 1 :(得分:0)
我有同样的问题。我一直在重新检查我的网格,以为我在那里犯了一个错误。事实证明,我的问题出现在我传入网格的对象中:我的对象的ID在传入时没有设置。
我检查了Fiddler,并且POST仍在进行,但没有对象的ID,我的控制器无法识别参数,因此没有达到我的操作。
确保您的读取操作返回的对象已设置其属性。