Kendo Grid如何更新,创建,删除数据源

时间:2014-04-03 09:08:30

标签: javascript jquery ajax asp.net-mvc kendo-ui

由于某些原因我不能使用Kendo grid的MVC包装器。所以我试图在Javascript上构建Kendo网格。

尝试在网格上更新或创建记录时有两个主要问题。

1-)网格上的所有操作(销毁,更新,创建)只是通过数据源的Kendo网格创建动作。例如,在更新记录之后,数据源将数据发送到此URL多次(列数): http://localhost:63186/Administrator/DefinitionDetailCreate。它应该将值传递给:

http://localhost:63186/Administrator/DefinitionDetailUpdate

2-)操作(更新或创建)后,Grid将所有数据发送到Action Method而不是新的或更新的数据。因此它会向网格发送请求列数

JS:

  var dataItem = this.dataItem($(e.target).closest("tr"));
        var code = dataItem.CODE;
       // alert(code);

        var crudServiceBaseUrl = "/Administrator/",
                     dataSource = new kendo.data.DataSource({
                         transport: {
                             read: {
                                 url: '@Url.Action("DefinitionDetailRead", "Administrator")',
                                 data: { DefinitionCode: code },

                                 dataType: "json"
                             },
                             update: {
                                 url: '@Url.Action("DefinitionDetailUpdate", "Administrator")' ,
                                 type: "POST",
                                 dataType: "text"
                             },
                             destroy: {
                                 url: '@Url.Action("DefinitionDetailDelete", "Administrator")',
                                 type: "POST",
                                 dataType: "text",
                             },
                             create: {
                                 url: '@Url.Action("DefinitionDetailCreate", "Administrator")',
                                 type: "POST",
                                 dataType: "text",

                             } },
                        // batch: true,
                         pageSize: 9,

                         schema: {
                             data: "Data",
                             model: {

                                 ID: "ID",
                                 fields: {
                                     ID: { editable: false, nullable: true },
                                     DESCRIPTION: { validation: { required: true } }


                                 }
                             }
                         }
                     });

        $("#detailsGrid").kendoGrid({

            dataSource: dataSource,
            attributes: { style: "padding-left: 0px; font-size: 14px"},
            pageable: {refresh: false, pageSizes: false, buttonCount: 5},
            toolbar: ["create"],
            columns: [
                {field: "DESCRIPTION", title: "DESCRIPTION", width: "200px"},
                { command: ["edit", "destroy"], title: "Operasyon", width: "100px" }],
            editable: "popup"
        });

控制器:

 [HttpPost]
    public ActionResult DefinitionDetailUpdate(Guid ID,Guid REFERENCEID,string DESCRIPTION)
    {
        return null;

    }
    [HttpPost]
     public ActionResult DefinitionDetailCreate(Guid ID, Guid REFERENCEID, string DESCRIPTION)
     {
         return null;

     }

2 个答案:

答案 0 :(得分:1)

首先,您可能需要添加parameterMap,这有助于识别服务器端方法:

parameterMap: function (options, operation) {
var out = null;
switch (operation) {
    case "create":
        out = '{ "param":' + options.somevalue + '}';
        break;
    case "read":
        out = '{ "id":' + options.somevalue + '}';
        break;
    case "update":
        out = '{ "id":' + options.somevalue + '}';
        break;
    case "destroy":
        out = '{ "id":  ' + options.somevalue + '}';
        break;
}
return out;

}

我还建议将所有数据类型保持为dataType: "json"

您的传输定义中似乎也缺少contentType

  update: {
                            url: _op.serviceBaseUrl + "Update",
                            dataType: "json",
                            type: "POST",
                            contentType: "application/json; charset=utf-8",
                            complete: function (jqXhr, textStatus) {

                            }
                        },

答案 1 :(得分:0)

我已针对相同类型的问题发布了answer,您可能需要检查

您可以使用此代码

JS

 var dataItem = this.dataItem($(e.target).closest("tr"));
            var code = dataItem.CODE;
           // alert(code);

            var crudServiceBaseUrl = "/Administrator/",
                         dataSource = new kendo.data.DataSource({
                             transport: {
                                 read: {

                                 url: '@Url.Action("DefinitionDetailRead", "Administrator")',
    type: "POST",
                                     dataType: "json"
                                 },
                                 update: {
                                     url: '@Url.Action("DefinitionDetailUpdate", "Administrator")' ,
                                     type: "POST",
                                     dataType: "json"
                                 },
                                 destroy: {
                                     url: '@Url.Action("DefinitionDetailDelete", "Administrator")',
                                     type: "POST",
                                     dataType: "json",
                                 },
                                 create: {
                                     url: '@Url.Action("DefinitionDetailCreate", "Administrator")',
                                     type: "POST",
                                     dataType: "json",

                                 },
                                  parameterMap: function (options, operation) {
                                  if (operation !== "read" && options.models) {
                                  return { models: kendo.stringify(options.models) };
                                  }
                              } },
                            // batch: true,
                             pageSize: 9,

                             schema: {
                                 data: "Data",
                                 model: {

                                     ID: "ID",
                                     fields: {
                                         ID: { editable: false, nullable: true },
                                         DESCRIPTION: { validation: { required: true } }


                                     }
                                 }
                             }
                         });

            $("#detailsGrid").kendoGrid({

                dataSource: dataSource,
                attributes: { style: "padding-left: 0px; font-size: 14px"},
                pageable: {refresh: false, pageSizes: false, buttonCount: 5},
                toolbar: ["create"],
                columns: [
                    {field: "DESCRIPTION", title: "DESCRIPTION", width: "200px"},
                    { command: ["edit", "destroy"], title: "Operasyon", width: "100px" }],
                editable: "popup"
            });

控制器

 [HttpPost]
    public ActionResult DefinitionDetailUpdate(string models)
    {
   //Deserialize to object
    IList<UrObjectType> objName= new JavaScriptSerializer().Deserialize<IList<UrObjectType>>(models);

     return Json(objName)


    }
    [HttpPost]
     public ActionResult DefinitionDetailCreate(string models)
     {
         //Deserialize to object
    IList<UrObjectType> objName= new JavaScriptSerializer().Deserialize<IList<UrObjectType>>(models);

     return Json(objName)

     }

请注意,parameterMap:function()使用名称模型以序列化字符串格式发送更新数据,因此您应在操作中使用“模型”作为参数名称

我希望这会对你有所帮助:)。