Ich erhalte diese Fehlermeldung, wenn ich das Formular abschicke. Außerdem wird die Aktionsmethode aus diesem Grund nicht aufgerufen:
Ein Element mit demselben Schlüssel wurde bereits hinzugefügt.
Und die Ausnahmedetails:
[ArgumentException: Ein Element mit demselben Schlüssel wurde bereits hinzugefügt.]
System.ThrowHelper.ThrowArgumentException (ExceptionResource-Ressource) +52
System.Collections.Generic.Dictionary`2.Insert (TKey-Schlüssel, TValue-Wert, Boolean add) +9382923 System .Linq.Enumerable.ToDictionary (IEnumerable`1-Quelle, Func`2-Schlüsselauswahl, Func`2-Elementauswahl, IEqualityComparer`1-Vergleicher) +252
System.Linq.Enumerable.ToDictionary (IEnumerable`1-Quelle, Func`2-Schlüsselauswahl, IEqualityComparer1 Vergleicher) +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 (Controllercontroller, ModelBindingContext Binding) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (Controllercontroller, ModelBindingContext Binding, Object Model) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel (Controller controllerContext, ModelBindingContext bindingContext) +2504
System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +548
System.Web.Mvc.ControllerActionInvoker.GetParameterValueContextContext,
System.Web.Mvc.ControllerActionInvoker.GetParameterValues (ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +830 System.We .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, Objekt-Tag) +54
System.Web.Mvc.Async.AsyncResultWrapper. Ende (IAsyncResult asyncResult, Objekt-Tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndP
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously) +184
ViewPage
<%@ 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>
<%} %>
quelle
Antworten:
Höchstwahrscheinlich haben Sie ein Modell, das dieselbe Eigenschaft zweimal enthält . Vielleicht verwenden Sie
new
, um die Basiseigenschaft auszublenden.Die Lösung besteht darin, die Eigenschaft zu überschreiben oder einen anderen Namen zu verwenden.
Wenn Sie Ihr Modell teilen, können wir mehr ausarbeiten.
quelle
Ich hatte das gleiche Problem und so habe ich es gelöst. Ich hatte eine doppelte Eigenschaft mit demselben Namen in meinem ViewModel. Eine Eigenschaft befand sich in BaseViewModel und eine andere im abgeleiteten Modell.
Ich habe das geändert in
Jetzt funktioniert es gut.
quelle
Ich hatte ein ähnliches Problem und stellte fest, dass es daran lag, dass ich ein ähnlich benanntes öffentliches Eigentum hatte (das privat sein sollte), das sich nur für den Fall unterschied.
gewesen sein sollte
quelle
Ich hatte 2 Modelleigenschaften wie diese
es ist seltsam, dass es diesen Fehler für diese 2 haha geworfen hat ..
quelle
Ich hatte das Problem nicht in meinem C # -Modell, sondern in dem Javascript-Objekt, das ich mit AJAX gepostet habe. Ich verwende Angular zum Binden und hatte ein großgeschriebenes
Notes
Feld auf der Seite, während mein C # -Objekt Kleinbuchstaben erwartetenotes
. Ein aussagekräftigerer Fehler wäre sicher nett.C #:
Winkel / Javascript:
quelle
Ich hatte das gleiche Problem, ich habe
foreach
mein Objekt durchlaufen und das Ergebnis zu a hinzugefügt,Dictionary<string, string>
und ich hatte ein Duplikat im Schlüssel aus der Datenbankitem.x
hatte einen doppelten Wertquelle
Ich fand die Antwort. Es lag an den Variablen. Wie int a und string a. Es gab zwei Variablen mit demselben Namen.
quelle
Hier ist, was ich getan habe, um herauszufinden, welcher Schlüssel zweimal hinzugefügt wurde. Ich habe den Quellcode von http://referencesource.microsoft.com/DotNetReferenceSource.zip heruntergeladen und VS eingerichtet, um die Framework-Quelle zu debuggen. Durch das Öffnen von Dictionary.cs in VS wurde das Projekt ausgeführt, sobald die Seite geladen wurde, ein Debug in der Zeile hinzugefügt
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
und der Schlüsselwert angezeigt. Ich erkannte, dass im JSON ein Buchstabe einer Variablen in Großbuchstaben geschrieben war, in meinem Modell jedoch in Kleinbuchstaben. Ich habe das Modell repariert und jetzt funktioniert der gleiche Code.quelle
Ich habe dies in MVC 5 und Visual Studio Express 2013 getroffen. Ich hatte zwei Eigenschaften mit einem
IndexAttribute
ähnlichen Namen unten. Das Auskommentieren eines davon und das Neukompilieren führten dazu, dass der MVC 5-Controller mit Ansichten gerüstet wurde, wobei Entity Framework erfolgreich war. Auf mysteriöse Weise lief der Gerüstbauer einwandfrei, als ich das Attribut auskommentierte, neu kompilierte und es erneut versuchte.Möglicherweise wurde das zugrunde liegende Entitätsdatenmodell oder "etwas" zwischengespeichert / beschädigt, und das Entfernen und erneute Hinzufügen des
IndexAttribute
einfach ausgelösten Erstellens dieses "Etwas" wurde ausgelöst.quelle
In MVC 5 stellte ich fest, dass das vorübergehende Auskommentieren von Verweisen auf ein Entity Framework-Modell und das Neukompilieren der Projektseite diesen Fehler beim Gerüstbau verursachte. Sobald ich mit dem Gerüst fertig bin, kommentiere ich den Code aus.
quelle
Ich möchte eine Antwort hinzufügen, die ich hier nicht sehe. Es hängt sehr mit der akzeptierten Antwort zusammen, ich hatte jedoch keine doppelten Eigenschaften in meinem Modell, es war ein Problem mit meinem Javascript.
Ich habe Ajax gespeichert und das Modell neu erstellt, um es an den Server zurückzusenden. Als ich die Seite zum ersten Mal initialisiert hatte, setzte ich mein ursprüngliches Modell auf eine Variable:
Mein
result.Data
hat eine Eigenschaft:result.Data.Items
Einige Zeit später mache ich einige Dinge und möchte über Ajax speichern. Ein Teil des Prozesses besteht darin, ein Array von einem Nebenprozess abzurufen, es auf meine
currentModel.Items
Eigenschaft zu setzen undcurrentModel
an den Server zu senden .In meinem Javascript habe ich jedoch Folgendes getan:
Ich habe es nicht verstanden, aber in Visual Studio wird der erste Buchstabe für Javascript-Eigenschaften automatisch in Kleinbuchstaben geschrieben (es könnte auch eine ReSharper-Sache sein). Dann habe ich den genauen Fehler von OP erhalten, als ich versucht habe zu speichern, weil currentModel jetzt
currentModel.items
AND hatcurrentModel.Items
Ein einfacher Wechsel von "Items" zu "Items" behebt das Problem.
quelle
Mein Problem war, dass ich eine @ Url.Action hatte und zweimal einen Wert für dieselbe Eigenschaft gesendet hatte
quelle
In meinem Fall läuft der Code einfach gut, wenn Sie ihn kompilieren. Das Aufrufen eines statischen Felds einer statischen Klasse mit einem Wörterbuch wie dem Beispielcode löst jedoch die Ausnahme aus.
Beispielcode
Erläuterung ADict hat den "Test" -Schlüssel zweimal hinzugefügt. Wenn Sie also die statische Klasse aufrufen, wird die Ausnahme ausgelöst.
quelle
Ich hatte das gleiche Problem. Es erschien mir nach der Migration von MVC 3 auf MVC 5.
Ich hatte eine benutzerdefinierte Editorvorlage und musste sie zuvor wie folgt verwenden:
Um das Problem zu beheben, musste ich das übergebene
ViewData
Objekt entfernen . Am Ende hatte ich also:Ich hoffe es hilft.
quelle
Ich habe den gleichen Fehler gehabt. Und nachdem ich bereits gedacht hatte, dass mein Verstand gebrochen ist, weil ich fast alle meine Modelleigenschaften umbenannt hatte, löschte die Lösung eine Referenz in All Syncfusion Controls und fügte Verweise auf die einzelnen Steuerelemente dieser Steuerelemente hinzu. (Von Nuget)
quelle
In meinem Fall war die Wurzel des Problems der doppelte Eigenschaftsname im Client-JSON, der sich nur durch die Groß- und Kleinschreibung unterschied.
quelle
Eine andere Möglichkeit, diesen Fehler zu finden, besteht in einem Dataset mit unbenannten Spalten . Der Fehler wird ausgelöst, wenn das Dataset in JSON serialisiert wird.
Diese Anweisung führt zu einem Fehler:
Das Hinzufügen von Spaltennamen verhindert den Fehler:
quelle
Ich habe den gleichen Fehler gehabt, aber b / c aus verschiedenen Gründen. Entity Framework verwenden. Eine weitere Sache, die ich hier hinzufügen muss, bevor ich meinen Code und meine Lösung freigebe, war, dass ich einen Haltepunkt bei der Controller-Methode hatte, aber dort nicht brach, sondern nur den internen Serverfehler der Ausnahme 500 auslöste.
Ich habe Daten aus der Ansicht über Ajax (http post) an den Controller gesendet. Das Modell, das ich als Parameter erwartet hatte, war eine Klasse. Es wurde mit einer anderen Klasse geerbt.
und im Blick
Einfach doppelte Felder aus der PurchaseOrder-Klasse entfernt und es funktionierte wie ein Zauber.
quelle
Ich habe den gleichen Fehler gehabt. Wenn ich den Code überprüfe, habe ich festgestellt, dass "GET" -Anforderung auf meiner eckigen Seite (Font-End) und "POST" -Anforderung auf der ASP.net-Seite (Back-End) deklariert ist. Stellen Sie POST / GET auf beiden Seiten ein. Dann wurde der Fehler behoben.
quelle
Ich sah mich einer ähnlichen Ausnahme gegenüber. Überprüfen Sie, ob alle Spalten Kopfzeilennamen (aus der ausgewählten Abfrage in der Datenbank) mit genau übereinstimmenden Eigenschaftsnamen in der Modellklasse haben.
quelle
Ich hatte dieses Problem im DBContext. Ich habe den Fehler erhalten, als ich versucht habe, eine Update-Datenbank in der Package Manager-Konsole auszuführen, um eine Migration hinzuzufügen:
öffentlicher virtueller IDbSet-Status {get; einstellen; }}
Das Problem war, dass der Typ und der Name gleich waren. Ich habe es geändert in:
öffentliche virtuelle IDbSet-Status {get; einstellen; }}
quelle