Kendo Grid - 如何将parameterMap输出附加到创建URL

时间:2014-07-11 15:59:17

标签: kendo-ui kendo-grid

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

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"}

我需要创建一个如下所示的网址:" / api / ServiceApi?method = Ref / SystemPermissionType& data = {" PermissionType":" test", "说明":"测试"}"

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

1 个答案:

答案 0 :(得分:1)

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

<小时/> 在POST中,附加在表单数据的标题中的数据。您可以使用网络嗅探器在此失败的ajax调用中看到此信息。

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

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

现在,如果您将此作为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));
}
相关问题