Recibo este error cada vez que envío el formulario y el método de acción no se llama debido a esto:
Ya se ha agregado un elemento con la misma clave.
Y los detalles de excepción:
[ArgumentException: ya se ha agregado un elemento con la misma clave.]
System.ThrowHelper.ThrowArgumentException (ExceptionResource resource) +52
System.Collections.Generic.Dictionary`2.Insert (tecla TKey, valor TValue, suma booleana) +9382923 Sistema .Linq.Enumerable.ToDictionary (IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) +252
System.Linq.Enumerable.ToDictionary (IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparador) +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, Object Model) 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 + parámetroDescripción)
System.Web.Mvc.ControllerActionInvoker.GetParameterValues (ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +830 System.Web.Mvc.Controller.Execute .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, etiqueta de objeto) +54
System.Web.Mvc.Async.AsperncResultWrap. End (IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRquestes (IAsyncRandult.EndProcessRequestes)
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completado sincrónicamente) +184
Ver pagina
<%@ 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>
<%} %>
fuente
Respuestas:
Lo más probable es que tenga un modelo que contenga la misma propiedad dos veces . Quizás esté utilizando
new
para ocultar la propiedad base.La solución es anular la propiedad o usar otro nombre.
Si comparte su modelo, podríamos elaborar más.
fuente
Tuve el mismo problema y así es como lo resolví. Tenía una propiedad duplicada con el mismo nombre en mi ViewModel. Una propiedad estaba en BaseViewModel y otra en el modelo derivado.
Cambié eso a
Ahora está funcionando bien.
fuente
Tuve un problema similar y descubrí que era porque tenía una propiedad pública con un nombre similar (que debería haber sido privada) que solo difería en el caso.
debería haber sido
fuente
Tenía 2 propiedades de modelo como esta
es extraño que arroje este error para estos 2 jaja ..
fuente
Tuve el problema no en mi modelo C #, sino en el objeto javascript que estaba publicando usando AJAX. Estoy usando Angular para la encuadernación y tenía un
Notes
campo en mayúscula en la página mientras mi objeto C # esperaba en minúsculasnotes
. Un error más descriptivo seguramente sería bueno.C#:
Angular / Javascript:
fuente
Tuve el mismo problema, estaba
foreach
recorriendo mi objeto y agregando el resultado enDictionary<string, string>
ay tenía un `Duplicar en la clave de la base de datositem.x
tenía un valor duplicadofuente
Encontré la respuesta. Fue por las variables. Como int a y string a. Había dos variables con el mismo nombre.
fuente
Esto es lo que hice para descubrir la clave que se agregó dos veces. Descargué el código fuente de http://referencesource.microsoft.com/DotNetReferenceSource.zip y configuré VS para depurar la fuente del marco. Abrió Dictionary.cs en VS ejecutó el proyecto, una vez que se carga la página, agregó una depuración en la línea
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
y pude ver el valor 'clave'. Me di cuenta de que en el JSON una letra de una variable estaba en mayúscula, pero en mi modelo estaba en minúscula. Arreglé el modelo y ahora funciona el mismo código.fuente
Llegué a esto en MVC 5 y Visual Studio Express 2013. Tenía dos propiedades con un me
IndexAttribute
gusta a continuación. Comentando uno de ellos y recompilando resultó en andamiaje del controlador MVC 5 con vistas, usando Entity Framework exitosamente. Misteriosamente, cuando descomenté el atributo, volví a compilar e intenté nuevamente, el andamio funcionó muy bien.Quizás el modelo de datos de entidad subyacente o "algo" se almacenó en caché / corrompido, y eliminar y volver a agregar
IndexAttribute
simplemente desencadenó una reconstrucción de ese "algo".fuente
En MVC 5 descubrí que comentar temporalmente las referencias a un modelo de Entity Framework y volver a compilar el lado del proyecto aumentó este error al andamiar. Una vez que termino el andamio descomento el código.
fuente
Me gustaría agregar una respuesta que no veo aquí. Está muy relacionado con la respuesta aceptada, sin embargo, no tenía propiedades duplicadas en mi modelo, era un problema con mi Javascript.
Estaba haciendo un guardado de Ajax donde estaba reconstruyendo el modelo para enviarlo de vuelta al servidor. Cuando inicialicé la página por primera vez, configuré mi modelo original en una variable:
Mi
result.Data
tiene una propiedad:result.Data.Items
Entonces, algún tiempo después, hago algunas cosas y quiero guardar, a través de Ajax. Parte del proceso es tomar una matriz de algún proceso secundario y establecerla en mi
currentModel.Items
propiedad y enviarlacurrentModel
al servidor.Sin embargo, en mi Javascript hice esto:
No lo entendí, pero en Visual Studio, se minúscula automáticamente la primera letra para las propiedades de Javascript (también podría ser una cosa ReSharper). Luego, recibí el error exacto publicado por OP cuando intenté guardar porque currentModel ahora tiene
currentModel.items
ANDcurrentModel.Items
Un simple cambio de "elementos" a "Elementos" solucionó el problema.
fuente
Mi problema era que tenía una @ Url.Action y había enviado dos veces un valor para la misma propiedad
fuente
En mi caso, simplemente cuando compila el código, funciona bien. Pero llamar a uno de un campo estático de una clase estática que tiene un diccionario como el código de muestra, arroja la excepción.
Código de muestra
Explicación ADict tiene la clave "prueba" agregada dos veces. Entonces, cuando llamas a la clase estática, arroja la excepción.
fuente
Tuve el mismo problema Me pareció después de migrar a MVC 5 desde MVC 3.
Tenía una plantilla de editor personalizada y tuve que usarla así antes:
Para resolver el problema, tuve que eliminar el
ViewData
objeto que pasaba . Así que al final tuve:Espero eso ayude.
fuente
He tenido el mismo error Y después de haber pensado que mi mente está rota, porque había cambiado el nombre de casi todas las propiedades de mis modelos, la solución fue eliminar una referencia en Todos los controles de sincronización y agregar referencias a los controles individuales de estos controles. (De Nuget)
fuente
En mi caso, la raíz del problema era el nombre de propiedad duplicado en el cliente json, que solo difería según la distinción entre mayúsculas y minúsculas.
fuente
Otra forma de encontrar este error es desde un conjunto de datos con columnas sin nombre . El error se produce cuando el conjunto de datos se serializa en JSON.
Esta declaración dará como resultado un error:
Agregar nombres de columna evitará el error:
fuente
He tenido el mismo error pero b / c de razón dif. Usando Entity framework. Una cosa más que necesito agregar aquí antes de compartir mi código y mi solución, tuve un punto de interrupción en el método del controlador, pero no se rompió allí, solo arrojé la excepción 500 error interno del servidor.
Estaba publicando datos desde la vista al controlador a través de ajax (publicación http). El modelo que esperaba como parámetro era una clase. Fue heredado con alguna otra clase.
y a la vista
Simplemente eliminó los campos duplicados de la clase PurchaseOrder y funcionó de maravilla.
fuente
He tenido el mismo error Cuando reviso el código, encontré que declara la solicitud "GET" en mi lado angular (fuente-fin) y declaro la solicitud "POST" en el lado ASP.net (back-end). Establecer POST / GET cualquiera en ambos lados. Luego resolvió el error.
fuente
Me enfrenté a una excepción similar. Compruebe si todas las columnas tienen nombres de encabezado (de la consulta de selección en la base de datos) con nombres de propiedades que coinciden exactamente en la clase de modelo.
fuente
Tuve este problema en el DBContext. Recibí el error cuando intenté ejecutar una base de datos de actualización en la consola de Package Manager para agregar una migración:
Estado de IDbSet virtual público {get; conjunto; }
El problema era que el tipo y el nombre eran iguales. Lo cambié a:
Estados de IDbSet virtuales públicos {get; conjunto; }
fuente