9

我正在使用 Durandal 创建一个应用程序,并将 WebAPI 作为服务器。我有一个 KendoUI 网格,可以正确显示来自服务器的数据并正常运行,直到调用 POST 或 PUT 方法。这是我的 GET 方法: 在此处输入图像描述

并且您可以看到该数据绑定到 UI(使用 Durandal 中的数据绑定扩展性更改为剑道绑定): 在此处输入图像描述

然后我在 Grid 中编辑数据,并将请求中的更改传递给服务器,如您在此 Fiddler 结果中所见: 在此处输入图像描述

在服务器端,我无法获取从客户端传递的数据以绑定到我作为 POST 或 PUT 方法的参数放置的任何内容。 在此处输入图像描述

我意识到这是几种不同的故障排除技术(例如 Durandal、KnockoutJs、Kendo DataBinding 和 WebAPI),但我认为基本原理是有效的,数据被检索并绑定到 UI 并在更改时回发,但是 WebAPI端点无法绑定到数据。

如何让传递的“模型”数组通过 WebAPI 中的 ModelBinding 结构进行绑定?

更新-这是有用的 JSFiddle,它给了我正确的 Content-Type 添加:http: //jsfiddle.net/Xhrrj/1/

new kendo.data.DataSource({ transport: { read: { type: "POST", url: "../cccs/service.svc/SupplierSearch", contentType: "application/json; charset=utf-8", dataType: 'json'...

这是来自 Telerik 论坛这里

4

2 回答 2

6

它看起来好像form-urlencodedjson格式混淆了 - 如果您查看它正在发送的解码字符串models=,然后是 urlencoded JSON 对象。

于 2013-05-05T07:26:05.890 回答
0

根据我的经验,我认为您的 PUT 端点声明需要如下所示:

[HttpPut]
public void Put([FromBody]IEnumerable<Product> models) { }

因此,您需要 FromBody 属性,因为您的产品数组在正文中(我认为?)而不是在请求的 url 中。

于 2013-05-04T22:06:25.520 回答