为什么我的KendoGrid不会调用我的MVC控制器?

时间:2014-03-20 23:02:57

标签: c# asp.net-mvc kendo-ui telerik kendo-grid

我在标准的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: "&nbsp;", width: "85px" }],
    editable: true
});

我从Kendo的examples改编了这段代码。问题是,从不调用UpdateTeachers方法。我怀疑问题出在parameterMap函数中,因为这是我最不了解的代码部分。

2 个答案:

答案 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,我的控制器无法识别参数,因此没有达到我的操作。

确保您的读取操作返回的对象已设置其属性。