Lincoln Bergeson
Lincoln Bergeson

Reputation: 3461

Why doesn't my KendoGrid call my MVC controller?

I have the following code in a standard C# ASP.NET MVC controller.

public JsonResult ReadTeachers()
{
    return Json(ReadTeacherData(), JsonRequestBehavior.AllowGet);
}

public void UpdateTeachers(IEnumerable<Teacher> updatedTeachers)
{
    // this is never called
}

I'm trying to call this controller with a KendoGrid. Here is the code for my grid.

$("#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
});

I adapted this code from Kendo's examples. The problem is, the UpdateTeachers method is never called. I suspect that the issue lies in the parameterMap function, because that's the part of the code I understand the least.

Upvotes: 1

Views: 2627

Answers (2)

Warr1611
Warr1611

Reputation: 445

I had the same issue. I kept rechecking my grid thinking I had made a mistake there. It turned out that my problem was in the object I was passing into the grid: my object's Id was not set when it was passed in.

I checked in Fiddler, and the POST was still being made, but without the object's ID my controller didn't recognize the parameters, thus not hitting my action.

Make sure the objects returned by your read action have their properties set.

Upvotes: 1

Abbas Galiyakotwala
Abbas Galiyakotwala

Reputation: 3019

instead of using

public void UpdateTeachers(IEnumerable<Teacher> updatedTeachers)
{
    // this is never called
}

used

public JsonResult UpdateTeachers(string models)
{
//Deserialize to object
IList<Teacher> teachers= new JavaScriptSerializer().Deserialize<IList<Teacher>>(models);

return Json(Teacher)
}

Note that parameterMap: function() send updated data in serialize string format with name models so you should use "models" as parameter name in your action

i hope this will help you

Upvotes: 1

Related Questions