我有一个使用asp web api作为后端的kendo ui网格。当我在kendo ui中调用create方法时,它在web api中调用了以下方法
public IHttpActionResult PostProduct(ProductDTO product)
{
...
...
return StatusCode(HttpStatusCode.NoContent);
}
现在,如果我尝试编辑Kendo Ui Grid中的项目,则再次调用create方法而不是update方法。 如果我重新加载页面(所以称为kendo ui网格的读取方法),更新方法可以正常工作。
问题是什么?我有以下架构:
schema: {
model: {
id: "Id",
fields: {
Id: { editable: false, type: "number" },
Name: { validation: { required: true } },
Description: { editable: true },
Price: { editable: true },
Active: { type: "boolean" },
}
}
}
我有以下传输(省略了一些代码)
$scope.tabellaProdotto = new kendo.data.DataSource({
transport: {
read: {
url: function () {
return "api/Prodotti/GetProdottoPerTipoProdotto/" + productTypeMainSelected;
},
dataType: "json"
},
create: {
url: "api/Prodotti/PostProdotto",
dataType: "json",
data: function (prodottoTmp) {
...
},
type: "POST"
},
update: {
url: function (prodotto) {
return "api/Prodotti/PutProdotto" + prodotto.Id
},
data: function (prodottoTmp) {
...
},
type: "PUT",
dataType: "json"
更新:问题似乎是web api操作方法的返回:
return CreatedAtRoute("DefaultApi", new { id = p.Id }, p);
现在可以工作,但p对象大小尺寸非常高:我必须返回整个对象吗?
答案 0 :(得分:0)
这听起来像Grid并没有让Json以正确的格式返回。 请务必使用KendoMVC DataSourceRequest对象以正确的格式返回数据。
以下是一个例子:
public ActionResult Update([DataSourceRequest] DataSourceRequest request, MyViewModel data)
{
var result = UpdateBackend(data);
return Json(result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}