J'obtiens 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 élément 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 (IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparateur) +252
System.Linq.Enumerable.ToDictionary (IEnumerable`1 source, Func`2 keySelector`1 comparer) +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 d'objet) +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.GetParameterValueControllerActionInvoker.GetParameterValue paramètre (ControllerContext)
System.Web.Mvc.ControllerActionInvoker.GetParameterValues (ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +830 System.Webore.Mvc. .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.Rcestrec resultat38.
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean & completedSynchronously) +184
Voir page
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/XYZ.Master"
Inherits="System.Web.Mvc.ViewPage<XYZ.Models.Admin.AdminSegmentCommissionsModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<div class="box3">
<div class="userinfo">
<h3>Admin Segment Commissions</h3>
</div>
<div class="buttons-panel">
<ul>
<li>
<input type="submit" value="Save" class="save" />
</li>
<li>
<%:Html.ActionLink("Cancel", "Index", new { controller = "AdminSegmentCommissions" }, new { @class = "cancel" })%>
<%--<input type="button" value="Cancel" class="cancel" onclick="document.location.href='/AirlineLedgerTransactionReceiver/Index'" />--%>
</li>
</ul>
</div>
</div>
<div class="row-1">
<div class="form-box1 round-corner">
<div class="form-box1-row">
<div class="form-box1-row-content float-left">
<div>
<label>
<%: Html.LabelFor(model => model.FromSegmentNumber) %></label>
<%: Html.TextBoxFor(model => model.FromSegmentNumber) %>
<%: Html.ValidationMessageFor(model => model.FromSegmentNumber) %>
</div>
</div>
</div>
</div>
</div>
<%} %>
la source
Réponses:
Très probablement , vous avez un modèle qui contient deux fois la même propriété . Peut-être que vous utilisez
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 serons en mesure d'élaborer davantage.
la source
J'ai eu le même problème et c'est ainsi 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 un modèle dérivé.
J'ai changé ça en
Maintenant ça fonctionne bien.
la source
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 cas.
aurait du être
la source
J'ai eu 2 propriétés de modèle comme celle-ci
c'est étrange qu'il ait jeté cette erreur pour ces 2 haha ..
la source
J'ai eu le problème non pas dans mon modèle C #, mais dans l'objet javascript que je publiais en utilisant AJAX. J'utilise Angular pour la liaison et j'avais un
Notes
champ en majuscule sur la page alors que mon objet C # attendait des minusculesnotes
. Une erreur plus descriptive serait certainement bien.C #:
Angulaire / Javascript:
la source
J'ai eu le même problème, je
foreach
bouclais sur mon objet et j'ajoutais le résultat dans unDictionary<string, string>
et j'avais un `Dupliquer dans la clé de la base de donnéesitem.x
avait une valeur en doublela source
J'ai trouvé la réponse, à cause des variables. Comme int a et string a. il y avait deux variables avec le même nom.
la source
Voici ce que j'ai fait pour découvrir la clé qui a été ajoutée deux fois. J'ai téléchargé le code source à partir de http://referencesource.microsoft.com/DotNetReferenceSource.zip et j'ai configuré VS pour déboguer la source du framework. L'ouverture de Dictionary.cs dans VS a exécuté le projet, une fois la page chargée, a 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, elle était en minuscule. J'ai corrigé le modèle et maintenant le même code fonctionne.la source
J'ai frappé ceci dans MVC 5 et Visual Studio Express 2013. J'avais deux propriétés avec un
IndexAttribute
comme ci-dessous. La mise en commentaire de l'un d'entre eux et la recompilation ont abouti à l'échafaudage du contrôleur MVC 5 avec des vues, en utilisant Entity Framework avec succès. Mystérieusement, quand j'ai décommenté l'attribut, recompilé et réessayé, l'échafaudeur a fonctionné très bien.Peut-être que le modèle de données d'entité sous-jacent ou "quelque chose" a été mis en cache / corrompu, et la suppression et l'ajout de nouveau ont
IndexAttribute
simplement déclenché une reconstruction de ce "quelque chose".la source
Dans MVC 5, j'ai trouvé que le commentaire temporaire des références à un modèle Entity Framework et la recompilation du côté du projet ont résolu cette erreur lors de l'échafaudage. Une fois que j'ai terminé l'échafaudage, je décommente le code.
la source
Je voudrais ajouter 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 une sauvegarde Ajax où je reconstruisais le modèle pour 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:
Mon
result.Data
a une propriété:result.Data.Items
Donc, quelque temps plus tard, je fais des choses et je veux économiser, via Ajax. Une partie du processus consiste à récupérer un tableau d'un processus secondaire et à le définir sur ma
currentModel.Items
propriété et à l'envoyercurrentModel
au serveur.Dans mon Javascript, cependant, j'ai fait ceci, à la place:
Je ne l'ai pas attrapé, mais dans Visual Studio, la première lettre des propriétés Javascript sera automatiquement minuscule (cela pourrait aussi être une chose ReSharper). Ensuite, j'ai reçu l'erreur exacte publiée par OP lorsque j'ai essayé de sauvegarder car currentModel a maintenant
currentModel.items
ETcurrentModel.Items
Un simple changement de "éléments" à "éléments" a résolu le problème.
la source
Mon problème était que j'avais une @ Url.Action et j'avais envoyé deux fois une valeur pour la même propriété
la source
Dans mon cas, simplement lorsque vous compilez le code, il fonctionne très bien. Mais appeler l'un d'un champ statique d'une classe statique qui a un dictionnaire comme l'exemple de code a, lève l'exception.
Exemple de code
Explication ADict a ajouté deux fois la clé "test". Ainsi, lorsque vous appelez la classe statique, elle lève l'exception.
la source
J'ai eu le même problème. Il m'est apparu après la migration vers MVC 5 depuis MVC 3.
J'avais un modèle d'éditeur personnalisé et je devais l'utiliser comme ça avant:
Pour résoudre le problème, j'ai dû supprimer l'
ViewData
objet qui passait . Donc à la fin j'avais:J'espère que ça aide.
la source
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 était de supprimer une référence sur Tous les contrôles de synchronisation et d'ajouter des références aux contrôles individuels de ces contrôles. (De Nuget)
la source
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 le respect de la casse.
la source
Une autre façon de rencontrer cette erreur consiste à utiliser un ensemble de données avec des colonnes sans nom . L'erreur est générée lorsque l'ensemble de données est sérialisé dans JSON.
Cette déclaration entraînera une erreur:
L'ajout de noms de colonne évitera l'erreur:
la source
J'ai eu la même erreur mais b / c de raison diff. Utilisation du framework Entity. Une dernière chose que je dois ajouter ici avant de partager mon code et ma solution, j'avais un point d'arrêt sur la méthode du contrôleur mais cela ne cassait pas là, juste en lançant une erreur de serveur interne d'exception 500.
Je postais des données de vue au contrôleur via ajax (http post). Le modèle auquel je m'attendais en tant que paramètre était une classe. Il a été hérité avec une autre classe.
et en vue
Simplement supprimé les champs dupliqués de la classe PurchaseOrder et cela a fonctionné comme un charme.
la source
J'ai eu la même erreur. Quand je vérifie le code, j'ai trouvé que déclarer la demande «GET» dans mon côté angulaire (font-end) et déclarer la demande «POST» dans le côté ASP.net (back-end). Définissez POST / GET n'importe lequel des deux côtés. Puis résolu l'erreur.
la source
J'ai fait face à une exception similaire. Vérifiez si toutes les colonnes ont des noms d'en-tête (à partir de la requête de sélection dans la base de données) avec des noms de propriété exactement correspondants dans la classe de modèle.
la source
J'ai eu ce problème sur le DBContext. Vous avez l'erreur lorsque j'ai essayé d'exécuter une base de données de mise à jour dans la console du gestionnaire de package pour ajouter une migration:
État IDbSet virtuel public {get; ensemble; }
Le problème était que le type et le nom étaient les mêmes. Je l'ai changé en:
Statuts IDbSet virtuels publics {get; ensemble; }
la source