asp.net-mvc - Backbonejs 更新模型并将 idAttribute 设置为 Id

标签 asp.net-mvc backbone.js

我正在尝试更新主干模型,服务器端是 asp.net mvc 4。我得到:

"System.ArgumentException: An item with the same key has already been added" exception.

原因是因为backbone将Id和id作为属性发送到服务器,并且JsonValueProvider尝试将其添加到字典中。

这是我的模型:

 var Task = Backbone.Model.extend({
        url: "/tasks/task",
        idAttribute: "Id"
 });

这是通过 Put 请求发送到服务器:

{"Id":294912,"Task":"test","DueDate":"2012-03-24T02:00:00.000Z", "id":294912}

有没有办法阻止 Backbone 发送“id”属性?

最佳答案

这里的问题是因为 C# 中的约定与 JavaScript 中的约定不同。在 C# 中,类的属性以大写字母(Pascal Case)开头,而 JavaScript 中的属性通常以小写字母(Camel Case)开头。

因此,当序列化 View 模型时,JSON.NET 序列化程序的默认行为是使用相同大小写的属性来精确序列化对象。我可以将 View 模型上的属性重命名为驼峰式大小写,但这就像在 JavaScript 对象中使用帕斯卡大小写的属性一样“奇怪”。

因此,为了强制 Backbone 采用非约定方式,我更改了对象的序列化,通过利用 JSON.NET's Contract Resolver 将 Pascal 大小写属性转换为 Camel 大小写属性。功能。

var settings = new JsonSerializerSettings();
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
JsonSerializer serializer = JsonSerializer.Create(settings);

JsonConvert.SerializeObject(object, Formatting.None, settings);

现在,这在客户端与我的代码以及所有很酷的库之间建立了一致性。

关于asp.net-mvc - Backbonejs 更新模型并将 idAttribute 设置为 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9879686/

相关文章:

asp.net-mvc - Azure 下载 blob 文件流/内存流

javascript - 对于法语,JQuery 对十进制数字的验证失败

css - 单声道无法提供 css 文件 [错误] 命令失败 : failed to send file (file data)

javascript - Backbone.js 仅在 IE7 中导致错误

javascript - backbone.js 服务调用改变请求类型

c# - Visual Studio 2015 : MVC 6 Scaffolding switched to using IActionResult intead of ActionResult

javascript - jqGrid 不在网格中显示数据

ruby-on-rails - 在haml下划线模板中插入javascript时出现奇怪的错误

javascript - 如何覆盖 backbone.view 构造函数以与自己实现的注册表一起使用

jquery - 主干中的 $ 和 this.$ 有什么区别