【发布时间】:2025-12-11 02:45:01
【问题描述】:
我正在使用 Durandal 创建一个应用程序,并将 WebAPI 作为服务器。我有一个 KendoUI 网格,可以正确显示来自服务器的数据并正常运行,直到调用 POST 或 PUT 方法。这是我的 GET 方法:
您可以看到该数据绑定到 UI(使用 Durandal 中的 data-bind extensibility 更改为剑道绑定):
然后我在 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 论坛 here
【问题讨论】:
-
根据示例提琴手请求,您正在发回数据但格式不正确,因此 Web.API 无法使用它。所以问题在于序列化数据的方式。因此,请发布您的保存更改方法的代码,或者您创建
put请求的位置。 -
它看起来好像是在混合 form-urlencoded 和 json 格式 - 它发送
models=,然后是 urlencoded JSON 对象。 -
@nemesv,我正在使用 KendoUI 的 javascript 函数,这里有一个我认为可能有用的 sn-p: parameterMap: function(options, operation) { if (operation !== "read" && options.models) { return {models: kendo.stringify(options.models)}; } } - 链接docs.kendoui.com/getting-started/web/grid/editing -- 也在阅读这个,可能是改变 json 模型的一种方式,但不确定 -- docs.kendoui.com/getting-started/framework/datasource/overview
-
@Joanna,您是最接近正确的,http 标头将字符串格式化为 - Content-Type: application/x-www-form-urlencoded;字符集=UTF-8。通过将以下内容放在我的 javascript 对象中用于 PUT 和 POST,我通过 -- contentType: "application/json; charset=utf-8" 获得了正确的数据。给个答案,我给你。
-
@John - 我很高兴它有帮助
标签: json asp.net-web-api kendo-ui model-binding durandal