我有一个网格,我想从中创建一个新项目。它看起来像这样:
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", "说明":"测试"}"
换句话说,我有正确的字符串化数据。如何将其附加到我指定的网址?
答案 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));
}