【问题标题】:Why doesn't my KendoGrid call my MVC controller?为什么我的 KendoGrid 不调用我的 MVC 控制器?
【发布时间】:2014-04-28 02:59:56
【问题描述】:

我在标准 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 函数上,因为那是我最了解的代码部分。

【问题讨论】:

  • 如果您在浏览器开发工具中签入,当您编辑记录并单击“保存”按钮时是否会发送任何网络请求?想知道是客户端根本没有发送请求,还是URL不正确...

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


【解决方案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,因此您应该在操作中使用“models”作为参数名称

希望对你有帮助

【讨论】:

    【解决方案2】:

    我有同样的问题。我一直在重新检查我的网格,以为我在那里犯了一个错误。原来我的问题出在我传入网格的对象上:传入时我的对象的Id没有设置。

    我签入了 Fiddler,POST 仍在进行中,但没有对象的 ID,我的控制器无法识别参数,因此没有执行我的操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      相关资源
      最近更新 更多