Er is al een item met dezelfde sleutel toegevoegd

Ik krijg deze foutmelding telkens wanneer ik het formulier indien, ook de actiemethode wordt hierdoor niet aangeroepen:

Er is al een item met dezelfde sleutel toegevoegd.

En de uitzonderingsdetails:

[ArgumentException: een item met de
dezelfde sleutel is al toegevoegd.]
System.ThrowHelper.ThrowArgumentException (ExceptionResource)
bron) +52
System.Collections.Generic.Dictionary`2.Insert(TKey)
key, TValue-waarde, Booleaanse optelling)
+9382923 System.Linq.Enumerable.ToDictionary(IEnumerable’1
bron, Func`2 keySelector, Func`2
elementSelector, IEqualityComparer`1
vergelijker) +252
System.Linq.Enumerable.ToDictionary (IEnumerable`1
bron, Func`2 keySelector,
IEqualityComparer`1 vergelijker) +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, Objectmodel) +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, String 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, Object-tag) +54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult
asyncResult, Object-tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult
asyncResultaat) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
resultaat) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IexecutionStep.Execute()
+8836913 System.Web.HttpApplication.ExecuteStep (IexecutionStep
stap, Booleaans & synchroon voltooid)
+184

Bekijkpagina

<%@ 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>
      <%} %>


Antwoord 1, autoriteit 100%

Hoogstwaarschijnlijk , u hebt model dat twee keer dezelfde eigenschap bevat . Misschien gebruikt u newom de basisobject te verbergen.

Oplossing is om de eigenschap te negeren of een andere naam te gebruiken.

Als u uw model deelt, zouden we meer kunnen uitwerken.


2, Autoriteit 8%

Ik had hetzelfde probleem en dit is hoe ik het heb opgelost. Ik had een dubbele pand met dezelfde naam in mijn viewmodel. Eén pand was in Baseviewmodel en de andere is in het afgeleide model.

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

Ik heb dat gewijzigd in

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

Nu werkt het goed.


3, Autoriteit 6%

Ik had 2 model eigenschappen zoals deze

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

Het is vreemd dat het deze fout gooide voor deze 2 haha ​​..


4, Autoriteit 5%

Ik had een vergelijkbaar probleem en ontdekte dat het was omdat ik een vergelijkbaar genaamd openbaar eigendom had (dat had privé) die alleen in het geval verschilden.

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

had

moeten zijn geweest

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

5, Autoriteit 3%

Ik had het probleem niet in mijn C # -model, maar in het JavaScript-object plaatste ik met Ajax. Ik gebruik hoekig voor binding en had een geactiveerde NotesVELD OP DE PAGINA Terwijl mijn C # Object lagere letters verwachten Notes. Een meer beschrijvende fout zou zeker mooi zijn.

C #:

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

Angular / JavaScript:

<input ng-model="post.Notes" type="text">

6, Autoriteit 2%

Ik had hetzelfde probleem, ik was foreachlus over mijn object en het toevoegen van het resultaat in een Dictionary<string, string>en ik had een ‘duplicaat in de Sleutel uit de database

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

item.xhad een dubbele waarde


7

Ik vond het antwoord. Het was vanwege de variabelen. Zoals int a en string a. Er waren twee variabelen met dezelfde naam.


8

Dit is wat ik deed om de sleutel te achterhalen die twee keer werd toegevoegd. Ik heb de broncode gedownload van http://referencesource.microsoft.com/DotNetReferenceSource.zipen ingesteld VS om de broncode van het framework te debuggen. Opende Dictionary.cs in VS voerde het project uit, zodra de pagina was geladen, voegde een debug toe op de regel ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);en kon de ‘sleutel’-waarde zien. Ik realiseerde me dat in de JSON één letter van een variabele in hoofdletters was, maar in mijn model in kleine letters. Ik heb het model gerepareerd en nu werkt dezelfde code.


Antwoord 9

Ik heb dit bereikt in MVC 5 en Visual Studio Express 2013. Ik had twee eigenschappen met een IndexAttributezoals hieronder. Door een van hen te becommentariëren en opnieuw te compileren, resulteerde dit in het ondersteunen van de MVC 5-controller met views, waarbij het Entity Framework succesvol was. Wonder boven wonder werkte de steigerbouwer prima toen ik het attribuut verwijderde, opnieuw compileerde en het opnieuw probeerde.

Misschien is het onderliggende entiteitsgegevensmodel of ‘iets’ in de cache opgeslagen/beschadigd, en heeft het verwijderen en opnieuw toevoegen van het IndexAttributesimpelweg geleid tot een herbouw van dat ‘iets’.

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

Antwoord 10

In MVC 5 ontdekte ik dat het tijdelijk weglaten van verwijzingen naar een Entity Framework-model en het opnieuw compileren van de projectkant deze fout bij het opstellen optrad. Zodra ik klaar ben met steigeren, verwijder ik de code.

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

Antwoord 11

Ik wil een antwoord toevoegen dat ik hier niet zie. Het is erg gerelateerd aan het geaccepteerde antwoord, maar ik had geen dubbele eigenschappen op mijn model, het was een probleem met mijn Javascript.

Ik was bezig met een Ajax-save waarbij ik het model aan het herbouwen was om terug te sturen naar de server. Toen ik de pagina voor het eerst had geïnitialiseerd, stelde ik mijn oorspronkelijke model in op een variabele:

var currentModel = result.Data;

Mijn result.Dataheeft een eigenschap: result.Data.Items

Dus enige tijd later doe ik wat dingen en wil ik sparen, via Ajax. Een deel van het proces is om een array uit een zijproces te halen en deze in te stellen op mijn eigenschap currentModel.Itemsen currentModelnaar de server te sturen.

In mijn Javascript deed ik in plaats daarvan dit:

currentModel.items = getData();

Ik heb het niet opgevangen, maar in Visual Studio zal het automatisch de eerste letter in kleine letters voor Javascript-eigenschappen (het kan ook een ReSharper-ding zijn). Toen kreeg ik de exacte fout gepost door OP toen ik probeerde op te slaan omdat currentModel nu currentModel.ItemsEN currentModel.Items

heeft

Een simpele verandering van “items” naar “Items” loste het probleem op.


Antwoord 12

Mijn probleem was dat ik een @Url.Action had en dat ik twee keer een waarde voor dezelfde eigenschap had verzonden


Antwoord 13

In mijn geval werkt het gewoon goed als je de code compileert. Maar het aanroepen van een statisch veld van een statische klasse die een woordenboek heeft zoals voorbeeldcode heeft, veroorzaakt de uitzondering.

Voorbeeldcode

public static AClass
{
    public static Dictionary<string, string> ADict = new Dictionary<string, string>()
        {
            {"test","value1"},{"test","value2"},
        };
}

uitleg
ADICT heeft twee keer toegevoegd “. Dus, wanneer u de statische klasse noemt, gooit het de uitzondering.


14

Ik heb dezelfde fout gehad. En nadat ik al heb gedacht dat mijn geest kapot is, omdat ik bijna al mijn modellen eigenschappen had gewijzigd, verwijderde de oplossing één referentie op alle syncfusion-besturingselementen en voegt verwijzingen toe aan de individuele bedieningselementen van deze bedieningselementen. (Van Nuget)


15

In mijn geval was de wortel van het probleem dubbele eigendomsnaam in de Client JSON, die alleen verschilt met de hoofdgevoeligheid.


16

Een andere manier om deze foutmelding tegen te komen, is van een dataset met niet-benoemde kolommen . De fout wordt gegooid wanneer de dataset is geserialiseerd in JSON.

Deze verklaring zal resulteren in fout:

select @column1, @column2

Het toevoegen van kolomnamen voorkomt de fout:

select @column1 as col1, @column2 as col2

Antwoord 17

Ik heb dezelfde fout gehad, maar vanwege een andere reden. Entiteitsframework gebruiken. Nog iets dat ik hier moet toevoegen voordat ik mijn code en oplossing deel, ik had een breekpunt op de controller-methode, maar het brak daar niet, alleen een interne serverfout van exception 500.

Ik plaatste gegevens van weergave naar controller via ajax (http-post). Het model dat ik als parameter verwachtte, was een klasse. Het is geërfd met een andere klas.

public class PurchaseOrder : CreateUpdateUserInfo
    {
        public PurchaseOrder()
        {
            this.Purchase_Order_Items = new List<clsItem>();
        }
        public int purchase_order_id { get; set; }
        public Nullable<int> purchase_quotation_id { get; set; }
        public int supplier_id { get; set; }
        public decimal flat_discount { get; set; }
        public decimal total { get; set; }
        public decimal net_payable { get; set; }
        public bool is_payment_complete { get; set; }
        public decimal sales_tax { get; set; }
        public DateTime CreatedOn { get; set; }
        public int CreatorUserID { get; set; }
        public DateTime UpdatedOn { get; set; }
        public int UpdatorUserID { get; set; }
        public bool IsDeleted { get; set; }
        public List<clsItem> Purchase_Order_Items { get; set; }
    }
 public class CreateUpdateUserInfo
    {
        public DateTime CreatedOn { get; set; }
        public int CreatorUserID { get; set; }
        public string CreatorUserName { get; set; }
        public DateTime UpdatedOn { get; set; }
        public int UpdatorUserID { get; set; }
        public string UpdatorUserName { get; set; }
        public bool IsDeleted { get; set; }
    }

en in het zicht

               var model = {
                supplier_id : isNaN($scope.supplierID) || 0 ? null : $scope.supplierID,
                flat_discount : 0,
                total : $scope.total,
                net_payable :  $scope.total,
                is_payment_complete :  true,
                sales_tax:0,
                Purchase_Order_Item: $scope.items
            };
            var obj = {
                method: 'POST',
                url: 'Purchase/SaveOrder',
                dataType: 'json',
                data: JSON.stringify(model),
                headers: { "Content-Type": "application/json" }
            };
            var request = $rootScope.AjaxRequest(obj);
            request.then(function (response) {
                var isError = response.data.MessageType === 1;
                $rootScope.bindToaster(response.data.MessageType,response.data.Message);
                //$('html, body').animate({ scrollTop: 0 }, 'slow');
                if(!isError){
                    //$scope.supplierID =undefined;
                }
            }, function (response) {
                $rootScope.bindToaster(2,response.data);
                console.log(response);
            });

Simpelweg gedupliceerde velden verwijderd van inkooporderklasse en het werkte als een charme.


18

Ik heb dezelfde fout gehad. Wanneer ik de code controleer, vond ik dat het verzoek ‘Krijg’ in mijn hoekige (font-end) kant en het verzoek van “Post” in de ASP.NET (back-end) kant verklaard. Stel POST in / krijg één aan beide zijden. Vervolgens de fout opgelost.


19

Ik kreeg te maken met een soortgelijke uitzondering. Controleer of alle kolommen koptekstnamen hebben (van selectiequery in database) met exact overeenkomende eigenschapsnamen in modelklasse.


Antwoord 20

Ik had dit probleem met de DBContext.
Ik kreeg de foutmelding toen ik probeerde een update-database uit te voeren in de Package Manager-console om een ​​migratie toe te voegen:

publieke virtuele IDbSet Status { get; set; }

Het probleem was dat het type en de naam hetzelfde waren.
Ik heb het veranderd in:

publieke virtuele IDbSet-statussen { get; set; }


Antwoord 21

Ik had exact deze fout, niet vanwege eigenschapsnamen, maar omdat ik dubbele aangepaste kenmerkwaarden had.

class Person {
  [Column("first_name")]
  public string FirstName { get; set; }
  [Column("first_name"]  // I forgot to change the custom attribute value
  public string LastName { get; set; }
  public static IEnumerable<Name> Names = db.Query<Name>(""); // error
}

Antwoord 22

2021 – maart

Demo op dotnetfiddle

In mijn geval is de keyin het woordenboek gedupliceerd.


Antwoord 23

In mijn geval was het omdat ik JoinAlias ​​​​binnen een for gebruikte.

           foreach (ISearchSpecsFilter item in searchFilter.SpecsFilter) {
                if (item.MinValue + item.MinValue != 0) {
                    result = result
                        .WithSubquery
                        .WhereExists(
                            workDetailEntity
                                .JoinAlias(j => j.WorkDetailLabel, () => workDetailLabelEntity)
                                .JoinAlias(j => workDetailLabelEntity.WorkLabel, () => workLabelEntity)
                                .JoinAlias(j => workDetailLabelEntity.WorkUnitMeasureType, () => workUnitMeasureTypeEntity)
                                .Where(w => w.Work.WorkId == workEntity.WorkId && w.Value >= item.MinValue && w.Value <= item.MaxValue && workLabelEntity.WorkLabelId == item.WorkLabelId && workUnitMeasureTypeEntity.WorkUnitMeasureTypeId == (int)item.WorkUnitMeasure)
                                .Select(s => s.Work.WorkId)
                        );
                }
            }

Other episodes