Um item com a mesma chave já foi adicionado
Eu recebo esse erro sempre que envio o formulário e o método de ação não está sendo chamado por causa disso:
E os detalhes da exceção:
[ArgumentException: um item com a mesma chave já foi adicionado.]
System.ThrowHelper.ThrowArgumentException (recurso ExceptionResource) +52
System.Collections.Generic.Dictionary`2.Insert (chave TKey, valor TValue, adição booleana) +9382923 System .Linq.Enumerable.ToDictionary (fonte IEnumerable`1, Func`2 keySelector, Func`2 elementSelector, comparador IEqualityComparer`1) +252
System.Linq.Enumerable.ToDictionary (IEnumerable`1 fonte, Func`2 keySelector, IEqualityComparer`1 comparador) +91
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext bindingContext, Modelo de objeto) +98 System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +548 System.Web.Mvc.ControllerActionInvoker.GetParameterValue (ControllerContext controllerContextDesDescription)
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +830 System.Web.Mvc.Controller.ExecuteCore () .Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +111
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, marca de objeto) +54
System.Web.Mvc.Async.AsyncResultWrapper. Fim (IAsyncResult asyncResult, marca de objeto) +40
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (resultado de IAsyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (etapa IExecutionStep, booleana e concluída de forma síncrona) +184
— user650922
Você precisa adicionar mais contexto a isso. Mostre-nos o código do controlador e descreva as ações exatas que você está executando. Faça um pouco de depuração por conta própria, para que suas perguntas sejam mais detalhadas e não apenas pedaços gigantes de código / pilha.
Verifiquei meu JSON que estava postando muito de perto e encontrei uma propriedade duplicada - uma identificação do cliente e uma identificação do cliente - por meio de um erro de digitação em javascript que ambas as propriedades foram adicionadas ao JSON que eu estava postando; portanto, apenas um heads-up que resolveu esse problema mim.
— AVH 25/09
Provavelmente , você tem um modelo que contém a mesma propriedade duas vezes . Talvez você esteja usando newpara ocultar a propriedade base.
A solução é substituir a propriedade ou usar outro nome.
Se você compartilhar seu modelo, poderemos elaborar mais.
Em C #, digamos, se você tiver variável1 e Variável1 (isso gerará o erro). Além disso, verifique se não há nenhum nome EDMX semelhantes (coluna da tabela tem "moeda", uma das Propriedades Nome da Navegação tinha "Moeda")
@Naveen Ótimo, é fixo! Vejo que como isso pode ser compilado, mas gera erro aqui. Algumas partes da estrutura (diferentemente do C #) não diferenciam maiúsculas de minúsculas.
— Aliostad 6/03/12
Alguém saberia identificar qual é "a mesma chave?"
Comecei a obtê-lo depois de mexer em alguns modelos de exibição (adicionamos uma propriedade Id). A falha foi que o JS já estava colocando um "id" (ID em minúsculas) no objeto para algum gerenciamento da interface do usuário, mas ao enviar, o objeto JSON tinha as propriedades "Id" e "id", que mapeiam a mesma chave em Fichário de modelo do ASP.NET, daí esse erro.
PS: isso é permitido no MVC3, mas não no MVC5. Não sei por que isso foi alterado.
Eu tive o mesmo problema e foi assim que resolvi. Eu tinha uma propriedade duplicada com o mesmo nome no meu ViewModel. Uma propriedade estava em BaseViewModel e outra em Model derivado.
Eu mudei isso para
— atulpatel.mca
Obrigado, apenas uma rápida fyi, isso também ocorre mesmo se a base eo modelo tem o mesmo nome do atributo com diferente caso por exemplo Base: Usuário, Modelo: usuário
— Richard Housham
Eu tive um problema semelhante e descobri que era porque eu tinha uma propriedade pública com nome semelhante (que deveria ter sido privado) que diferia apenas no caso.
Eu tinha duas propriedades do modelo como esta
é estranho que ele jogou esse erro para esses 2 haha ​​..
— CuriousBenjamin
Eu tive o problema não no meu modelo C #, mas no objeto javascript que eu estava postando usando AJAX. Estou usando Angular para ligação e tinha um Notescampo em maiúsculas na página enquanto meu objeto C # esperava letras minúsculas notes. Um erro mais descritivo seria bom.
É uma resposta um pouco diferente, nenhuma das minhas classes C # tem propriedades duplicadas com casos diferentes, mas o JSON que estava sendo enviado ao meu controlador tinha. Pensei que pode vir a calhar com outras pessoas procurando pelo mesmo problema se eles não conseguem encontrar o problema no seu código C # ..
O mesmo que Goematt. O objeto JSON que estava sendo enviado tinha nomes duplicados, embora o objeto c # ao qual eu estava vinculando ignorasse completamente essas chaves, ele ainda falhou. Isso é idiota, talvez até um bug na minha mente. Como não estou controlando o objeto JSON que está sendo enviado, não posso responder pelo que todos os campos extras estão sendo enviados.
— Kukabuka
Eu tive o mesmo problema, estava foreachfazendo um loop sobre meu objeto e adicionando o resultado em um Dictionary<string, string>e eu tinha um `Duplicar na chave do banco de dados
item.x teve um valor duplicado
Eu encontrei a resposta. Foi por causa das variáveis. Como int a e string a. havia duas variáveis ​​com o mesmo nome.
Aqui está o que eu fiz para descobrir a chave que estava sendo adicionada duas vezes. Fiz o download do código-fonte em http://referencesource.microsoft.com/DotNetReferenceSource.zip e configurei o VS para depurar a fonte da estrutura. O Dictionary.cs aberto no VS executou o projeto, após o carregamento da página, adicionou uma depuração na linha ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);e conseguiu ver o valor da 'chave'. Percebi que no JSON uma letra de uma variável estava em maiúscula, mas no meu modelo era minúscula. Corrigi o modelo e agora o mesmo código funciona.
— bvoleti
Eu bati isso no MVC 5 e no Visual Studio Express 2013. Eu tinha duas propriedades IndexAttributecomo abaixo. Comentar um deles e recompilar resultou no andaime do controlador MVC 5 com visualizações, usando o Entity Framework com êxito. Misteriosamente, quando descomentei o atributo, recompilei e tentei novamente, o andaime funcionou perfeitamente.
Talvez o modelo de dados da entidade subjacente ou "algo" tenha sido armazenado em cache / corrompido, e remover e adicionar novamente o IndexAttributesimplesmente desencadeou uma reconstrução desse "algo".
No MVC 5, descobri que comentar temporariamente as referências a um modelo do Entity Framework e recompilar o lado do projeto causavam esse erro ao andaimes. Depois de terminar o andaime, descomente o código.
Gostaria de adicionar uma resposta que não vejo aqui. Está muito relacionado à resposta aceita, no entanto, eu não tinha propriedades duplicadas no meu modelo, era um problema com o meu Javascript.
Eu estava fazendo um salvamento do Ajax, onde estava reconstruindo o modelo para enviar de volta ao servidor. Quando inicializei a página, configurei meu modelo original para uma variável:
My result.Datatem uma propriedade:result.Data.Items
Então, algum tempo depois, faço algumas coisas e quero salvar, via Ajax. Parte do processo é pegar uma matriz de algum processo paralelo e configurá-la para minha currentModel.Itemspropriedade e enviar currentModelpara o servidor.
No meu Javascript, no entanto, fiz isso:
Eu não peguei, mas no Visual Studio, ele irá minúscula a primeira letra para as propriedades Javascript (também pode ser uma coisa do ReSharper). Em seguida, recebi o erro exato postado pelo OP ao tentar salvar porque o currentModel agora possui currentModel.itemsANDcurrentModel.Items
Uma simples mudança de "itens" para "Itens" resolveu o problema.
— JasonWilczak
Meu problema era que eu tinha uma @ Url.Action e enviava um valor para a mesma propriedade duas vezes
— abiNerd
No meu caso, simplesmente quando você compila o código, ele funciona muito bem. Mas chamar um de um campo estático de uma classe estática que possui um dicionário como o exemplo de código gera uma exceção.
Explicação O ADict adicionou a chave "test" duas vezes. Portanto, quando você chama a classe estática, ela lança a exceção.
— Ahmet Remzi EKMEKCI
Eu tive o mesmo problema. Pareceu-me depois de migrar para o MVC 5 do MVC 3.
Eu tinha um modelo de editor personalizado e precisava usá-lo dessa maneira antes:
Para resolver o problema, tive que remover o ViewDataobjeto que estava passando . Então, no final, eu tive:
Eu tive o mesmo erro. E depois que eu já pensei que minha mente estava quebrada, porque havia renomeado quase todas as propriedades de meus modelos, a solução foi excluir uma referência em Todos os controles de sincronização e adicionar referências aos controles individuais desses controles. (De Nuget)
— AlfredBauer
No meu caso, a raiz do problema era o nome da propriedade duplicado no cliente json, que diferia apenas pela distinção entre maiúsculas e minúsculas.
— kubajs
Outra maneira de encontrar esse erro é de um conjunto de dados com colunas sem nome . O erro é lançado quando o conjunto de dados é serializado no JSON.
Esta declaração resultará em erro:
A adição de nomes de colunas impedirá o erro:
— user9375338
Eu tive o mesmo erro, mas b / c de razão diff. Usando estrutura de entidade. Mais uma coisa que preciso adicionar aqui antes de compartilhar meu código e solução, eu tinha um ponto de interrupção no método do controlador, mas ele não estava funcionando lá, apenas lançando a exceção 500 erro interno do servidor.
Eu estava postando dados do modo de exibição no controlador através do ajax (http post). O modelo que eu esperava como parâmetro era uma classe. Foi herdado com alguma outra classe.
e em vista
Basta remover os campos duplicados da classe PurchaseOrder e funcionou como um encanto.
— Adeel Shekhani
Eu tive o mesmo erro. Quando verifico o código, descobri que declarar a solicitação "GET" no meu lado angular (fonte) e declarar a solicitação "POST" no lado do ASP.net (back-end). Defina POST / GET para qualquer um dos dois lados. Então resolveu o erro.
— Sanjib Dhar
Eu enfrentei exceção semelhante. Verifique se todas as colunas possuem nomes de cabeçalho (na consulta selecionada no banco de dados) com nomes de propriedades exatamente correspondentes na classe de modelo.
Eu tive esse problema no DBContext. Erro ao tentar executar um banco de dados de atualização no console do Package Manager para adicionar uma migração: