1

使用 this.model.save() 保存模型和使用 jquery ajax 类型 PUT 之间似乎存在一些差异?

我的 api 控制器中有以下方法

public void Put(string id, [FromBody]IContent value) {
    // save
}

我还在 JSON 格式化程序序列化程序设置上启用了 TypeNameHandling,如下所示:

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;

如果我像这样使用 jquery ajax 放置一些数据

$.ajax({  
    url: "/api/page/articles/1",  
    type: "PUT",  
    dataType: "json",  
    contentType: "application/json",
    data: JSON.stringify({"$type": "BrickPile.Samples.Models.Article,BrickPile.Samples","id": "articles/1", "heading": "Some heading..." })
});

我的对象在 put 方法中绑定正确,但是当我尝试在主干中使用 model.save() 保存对象时,输入值为 null 并且无法绑定对象?

我就是这样做的:

this.model.set({ heading: 'foo' });
this.model.save();

请求标头看起来不错,并且有效负载似乎是 JSON,至少如果我查看萤火虫的话。也可以使用具有相同有效负载的提琴手将一些数据放入我的 api,但如果我从 firebug 复制有效负载源,请参阅:http ://cl.ly/Nked

谁能解释我在这里做错了什么?

4

1 回答 1

0

如果不了解更多关于您的模型实现的信息,就很难确定。从您的萤火虫屏幕截图中我可以看到的一件事是,正在传递 id 属性,因为"articles/1"这对于标准 Backbone 来说是不寻常的。如果您要保存模型对象,则 id 通常为"1". 所以 amodel.save()会生成一个 HTTP PUTarticles/1并将 json 作为包括{"id":"1", ... }. Backbone.sync文档有更多关于默认行为的详细信息。

于 2013-03-22T06:20:39.730 回答