为啥我的 KendoGrid 不调用我的 MVC 控制器?

Posted

技术标签:

【中文标题】为啥我的 KendoGrid 不调用我的 MVC 控制器?【英文标题】: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不正确... 【参考方案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,我的控制器无法识别参数,因此没有执行我的操作。

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

【讨论】:

以上是关于为啥我的 KendoGrid 不调用我的 MVC 控制器?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)

ASP.NET MVC - Kendo Grid 慢分页

为啥 Asp.Net MVC 不在我的共享目录中搜索视图?

为啥不调用种子方法?

如何自动更新剑道网格?

为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?