【问题标题】:Kendo Grid - How to append parameterMap output to a create UrlKendo Grid - 如何将 parameterMap 输出附加到创建 Url
【发布时间】:2014-07-12 04:59:48
【问题描述】:

我有一个网格,我想从中创建一个新项目。它看起来像这样:

self.PermissionTypeGrid = kendo.observable({
        isVisible: true,
        permissionTypes: new kendo.data.DataSource({
            schema: {
                model: { id: "PermissionType" },

            transport: {
                read: {
                    url: "/api/ServiceApi?method=Ref/SystemPermissionTypes",
                    type: "GET"
                },
                create: {
                    url: "/api/ServiceApi?method=Ref/SystemPermissionType",
                    type: "POST"
                },
                parameterMap: function(data, type) {
                    if (type == "create") {
                        return { models: kendo.stringify(data) };
                    }
                }
            }
        })
    });
    kendo.bind($("#permissionTypeGrid"), self.PermissionTypeGrid);

parameterMap 部分返回一个如下所示的字符串:

{"PermissionType":"test","Description":"test"}

我需要创建一个如下所示的 url:"/api/ServiceApi?method=Ref/SystemPermissionType&data={"PermissionType":"test","Description":"test"}"

换句话说,我有正确的字符串化数据。如何将其附加到我指定的 url?

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案1】:

    将您的类型设置为 GET。然而。这是不好的做法。


    在 POST 中,附加在表单数据标头中的数据。您可以通过网络嗅探器在这个失败的 ajax 调用中看到这一点。
    $.ajax({
      url:'http://test.com',
      data:{'test':'test'},
      type:'POST'
    });
    

    如果您查看网络流量,您会发现数据不是 url 的一部分。

    现在,如果您将其作为 GET 来尝试

    $.ajax({
      url:'http://test.com',
      data:{'test':'test'},
      type:'GET'
    });
    

    您会看到数据被附加到 URL 的查询字符串中

    http://test.com/?test=test 
    

    请注意,URL 的长度是有限制的,如果您尝试追加大量数据,则仅通过 GET 方法提交数据可能会失败。您也可以让您的服务器以不同的方式处理 GET 和 POST。

    您可以搜索 Stack Overflow 以获取有关每个应用程序用途的更多详细说明。
    像这样:GET vs POST in Ajax


    我建议您改为将控制器更改为除了发布消息,并将该数据嵌入到表单数据中(就像您现在所做的那样)

    这里是创建控制器方法的 kendo CRUD 操作示例 http://demos.telerik.com/aspnet-mvc/grid/editing-inline

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditingInline_Create([DataSourceRequest] DataSourceRequest request, ProductViewModel product)
    {
      if (product != null && ModelState.IsValid)
      {         
        productService.Create(product);                                 
      }
      return Json(new [] { product }.ToDataSourceResult(request, ModelState));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多