gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:52:44 25 4
gpt4 key购买 nike

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

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



原因是因为主干将 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}

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

最佳答案

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

因此,当序列化 View 模型时,JSON.NET 序列化器的默认行为是使用相同的属性大小写完全序列化对象。我可以将 View 模型上的属性重命名为驼峰式大小写,但是在 JavaScript 对象中使用带有 pascal 大小写的属性会很“奇怪”。

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com