2013-03-21 87 views
1

使用this.model.save()保存模型和使用jquery ajax类型PUT似乎有一些区别?

我在API控制器下面的方法

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

我也启用TypeNameHandling对JSON格式序列化的设置是这样的:

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

如果我把使用jQuery阿贾克斯这样的一些数据

$.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()保存我的对象,输入值为空,它不能绑定对象?

这是我要做的事:

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

请求头似乎看行和有效载荷似乎是JSON,至少如果我看着萤火虫。也可以使用相同有效负载的提琴手将一些数据放入我的api中,但是如果我从萤火虫中复制有效负载源,请参阅:http://cl.ly/Nked

任何人都可以解释我在这里做错了什么吗?

回答

0

不知道更多关于您的模型实现,很难肯定地说。从firebug截图中我可以看到的一件事是id属性被传递为"articles/1",这对于标准骨干来说是不寻常的。如果您保存模型对象,则该ID通常为"1"。因此model.save()会生成一个HTTP PUT到articles/1并通过json作为某些东西,包括{"id":"1", ... }Backbone.sync文档具有有关默认行为的更多详细信息。