Javascript 剑道网格如何更新、创建、删除数据源

Javascript 剑道网格如何更新、创建、删除数据源,javascript,jquery,ajax,asp.net-mvc,kendo-ui,Javascript,Jquery,Ajax,Asp.net Mvc,Kendo Ui,由于某些原因,我不能使用剑道网格的MVC包装器,所以我尝试在Javascript上构建剑道网格 当试图在网格上更新或创建记录时,有两个主要问题 1-)网格上的所有操作(销毁、更新、创建)只需通过剑道网格的Datasource创建操作即可。例如,更新记录后,Datasource将数据发送到此url多次(列数): http://localhost:63186/Administrator/DefinitionDetailCreate。它应将值传递给: http://localhost:63186/Ad

由于某些原因,我不能使用剑道网格的MVC包装器,所以我尝试在Javascript上构建剑道网格

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

1-)网格上的所有操作(销毁、更新、创建)只需通过剑道网格的Datasource创建操作即可。例如,更新记录后,Datasource将数据发送到此url多次(列数):
http://localhost:63186/Administrator/DefinitionDetailCreate
。它应将值传递给:

http://localhost:63186/Administrator/DefinitionDetailUpdate
2-)操作(更新或创建)后,网格将所有数据发送到Action方法,而不是新的或更新的数据。因此,它发送网格上列数的请求

JS:

控制器:

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

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

     }

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

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) {

                            }
                        },
我已经发布了相同类型的问题,您可以查看一下

您可以使用此代码

js

控制器

 [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)

     }
[HttpPost]
公共操作结果定义详细信息更新(字符串模型)
{
//反序列化到对象
IList objName=new JavaScriptSerializer()。反序列化(模型);
返回Json(objName)
}
[HttpPost]
公共操作结果定义详细信息创建(字符串模型)
{
//反序列化到对象
IList objName=new JavaScriptSerializer()。反序列化(模型);
返回Json(objName)
}
请注意,parameterMap:function()使用名称models以序列化字符串格式发送更新的数据,因此您应该在操作中使用“models”作为参数名称


我希望这将对您有所帮助:)

当我添加contentType:“application/json;charset=utf-8”时,没有什么是通过操作捕获的方法,而是发布了一些数据。当我添加paramaterMap选项时,没有来自read方法的数据。如果您不能使用Mvc包装器,我想我需要用Kendo Mvc包装器解决您缺少的东西。您是否已将剑道UI命名空间添加到视图文件夹中的Web配置中?或者使用Kendo.Mvc.UI在视图顶部抛出一个

 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)

     }