Un article avec la même clé a déjà été ajouté

Je reçois cette erreur à chaque fois que je soumets le formulaire et que la méthode d’action n’est pas appelée à cause de cela:

Un article avec la même clé a déjà été ajouté.

Et les détails de l’exception:

[ArgumentException: un élément avec la même clé a déjà été ajouté.]
System.ThrowHelper.ThrowArgumentException (ressource ExceptionResource) +52
System.Collections.Generic.Dictionary`2.Insert (clé TKey, valeur TValue, ajout booléen) +9382923 System.Linq.Enumerable.ToDictionary (source IEnumerable`1, sélecteur de clés Func`2, élémentSelector Func`2, comparateur IEqualityComparer`1 ) +252
System.Linq.Enumerable.ToDictionary (source IEnumerable`1, sélecteur de clés Func`2, comparateur IEqualityComparer`1) +91
System.Web.Mvc.ModelBindingContext.get_PropertyMetadata () +228 System.Web.Mvc.DefaultModelBinder.BindProperty (ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +392
System.Web.Mvc.DefaultModelBinder.BindProperties (ControllerContext controllerContext, ModelBindingContext bindingContext) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext bindingContext, modèle object) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +2504
System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +548
System.Web.Mvc.ControllerActionInvoker.GetParameterValue (ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +473
System.Web.Mvc.ControllerActionInvoker.GetParameterValues ​​(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, Ssortingng actionName) +830 System.Web.Mvc.Controller.ExecuteCore () +136 System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +111
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +39
System.Web.Mvc. C__DisplayClass8.b__4 () +65 System.Web.Mvc.Async. C__DisplayClass1.b__0 () +44 System.Web.Mvc.Async. C__DisplayClass8`1.b__7 (IAsyncResult _ ) +42 System.Web.Mvc.Async.WrappedAsyncResult`1.End () +141 System.Web.Mvc.Async.AsyncResultWrapper.End (IAsyncResult asyncResult, balise Object) +54
System.Web.Mvc.Async.AsyncResultWrapper.End (IAsyncResult asyncResult, balise Object) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (résultat IAsyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (étape IExecutionStep, Boolean & completedSynchronously) +184

Voir page

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/XYZ.Master" Inherits="System.Web.Mvc.ViewPage" %>  Create    

Admin Segment Commissions

  • <%----%>
model.FromSegmentNumber) %> model.FromSegmentNumber) %>

Très probablement , vous avez un modèle qui contient la même propriété deux fois . Vous utilisez peut-être new pour masquer la propriété de base.

La solution consiste à remplacer la propriété ou à utiliser un autre nom.

Si vous partagez votre modèle, nous pourrions en élaborer davantage.

J’ai eu le même problème et c’est comme ça que je l’ai résolu. J’avais une propriété en double avec le même nom dans mon ViewModel. Une propriété était dans BaseViewModel et une autre dans le modèle dérivé.

 public class BaseviewModel{ public int UserId { get; set; } } public class Model : BaseViewModel { public int UserId { get; set; } } 

J’ai changé cela pour

 public class BaseviewModel{ public int UserId { get; set; } } public class Model : BaseViewModel { public int User_Id { get; set; } } 

Maintenant ça fonctionne bien.

J’ai eu un problème similaire et j’ai trouvé que c’était parce que j’avais une propriété publique du même nom (qui aurait dû être privée) qui ne différait que par le cas.

 public ssortingng PropertyName {get;set;} // actually set propertyName, get propertyName public ssortingng propertyName {get;set;} 

aurait du être

 public ssortingng PropertyName {get;set;} private ssortingng propertyName {get;set;} 

J’ai eu 2 propriétés de modèle comme celle-ci

 public int LinkId {get;set;} public int LinkID {get;set;} 

il est étrange qu’il ait jeté cette erreur pour ces 2 haha ​​..

J’ai eu le problème pas dans mon modèle C #, mais dans l’object javascript que je publiais en utilisant AJAX. J’utilise Angular pour la liaison et j’ai un champ Notes majuscule sur la page tandis que mon object C # attendait des notes minuscules. Une erreur plus descriptive serait certainement bien.

C #:

 class Post { public ssortingng notes { get; set; } } 

Angular / Javascript:

  

J’ai trouvé la réponse. C’était à cause des variables. Comme int a et ssortingng a. il y avait deux variables avec le même nom.

J’avais le même problème, je devais passer en revue mon object et append le résultat dans un Dictionary et j’avais un duplicata dans la clé de la firebase database.

  foreach (var item in myObject) { myDictionary.Add(Convert.ToSsortingng(item.x), item.y); } 

item.x avait une valeur en double

Voici ce que j’ai fait pour découvrir la clé ajoutée deux fois. J’ai téléchargé le code source à partir de http://referencesource.microsoft.com/DotNetReferenceSource.zip et configuré VS pour déboguer la source du framework. Ouvert Dictionary.cs dans VS a exécuté le projet, une fois la page chargée, ajouté un débogage à la ligne ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate); et a pu voir la valeur «clé». J’ai réalisé que dans le JSON une lettre d’une variable était en majuscule mais dans mon modèle c’était une minuscule. J’ai corrigé le modèle et maintenant le même code fonctionne.

Je frappe ceci dans MVC 5 et Visual Studio Express 2013. J’avais deux propriétés avec un IndexAtsortingbute comme ci-dessous. En commentant l’un d’eux et en recompilant, le contrôleur MVC 5 a été échafaudé avec des vues, en utilisant Entity Framework. Mystérieusement, lorsque je décommentais l’atsortingbut, recompilai et réessayai, le supporteur fonctionnait correctement.

Peut-être que le modèle de données sous-jacent de l’entité ou “quelque chose” a été mis en cache / corrompu, et la suppression et le ré-ajout de l’ IndexAtsortingbute simplement déclenché une reconstruction de ce “quelque chose”.

 [Index(IsUnique = true)] public ssortingng Thing1 { get; set; } [Index(IsUnique = true)] public ssortingng Thing2 { get; set; } 

Dans MVC 5, j’ai constaté que le fait de commenter temporairement les références à un modèle Entity Framework et de recomstackr le côté du projet accélérait cette erreur lors de l’échafaudage. Une fois que j’ai fini d’échafaudage, je décomment le code.

 public Guid CreatedById { get; private set; } // Commented out so I can scaffold: // public virtual UserBase CreatedBy { get; private set; } 

Je voudrais append une réponse que je ne vois pas ici. C’est très lié à la réponse acceptée, cependant, je n’avais pas de propriétés dupliquées sur mon modèle, c’était un problème avec mon Javascript.

Je faisais quelques sauvegardes Ajax où je reconstruisais le modèle à renvoyer au serveur. Lorsque j’ai initialisé la page pour la première fois, j’ai défini mon modèle d’origine sur une variable:

 var currentModel = result.Data; 

Mon result.Data a une propriété: result.Data.Items

Donc, quelque temps plus tard, je fais des choses et je veux sauver via Ajax. Une partie du processus consiste à saisir un tableau à partir d’un processus secondaire et à le définir sur ma propriété currentModel.Items et à envoyer currentModel au serveur.

Dans mon Javascript, cependant, je l’ai fait à la place:

 currentModel.items = getData(); 

Je ne l’ai pas compris, mais dans Visual Studio, la première lettre des propriétés Javascript sera automatiquement mise en minuscule (cela pourrait aussi être une chose ReSharper). Ensuite, j’ai eu l’erreur exacte postée par OP lorsque j’ai essayé d’enregistrer car currentModel a maintenant currentModel.items AND currentModel.Items

Un simple changement de “articles” à “Items” a résolu le problème.

Mon problème était que j’avais un @ Url.Action et que j’avais envoyé deux fois une valeur pour la même propriété

J’ai eu le même problème. Il m’a semblé après la migration vers MVC 5 de MVC 3.

J’avais un modèle d’éditeur personnalisé et je devais l’utiliser comme ceci avant:

 @Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField", this.ViewData) 

Pour résoudre le problème, je devais supprimer le passage de l’object ViewData . Donc à la fin j’ai eu:

 @Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField") 

J’espère que cela aide.

J’ai eu la même erreur. Et après avoir déjà pensé que mon esprit était brisé, parce que j’avais renommé presque toutes les propriétés de mes modèles, la solution consistait à supprimer une référence sur Tous les contrôles de syncfusion et à append des références aux contrôles individuels de ces contrôles. (De Nuget)

Une autre façon de rencontrer cette erreur provient d’un jeu de données avec des colonnes sans nom . L’erreur est renvoyée lorsque le jeu de données est sérialisé dans JSON.

Cette déclaration entraînera une erreur:

 select @column1, @column2 

L’ajout de noms de colonnes évitera l’erreur:

 select @column1 as col1, @column2 as col2 

Dans mon cas, la racine du problème était le nom de propriété en double dans le client json qui ne différait que par la sensibilité à la casse.