tutorial net mvc libro español asp asp.net-mvc
http://referencesource.microsoft.com/DotNetReferenceSource.zip

asp.net-mvc - tutorial - libro asp.net mvc 5 español



Un artículo con la misma clave ya ha sido agregado (16)

En MVC 5 encontré que comentar temporalmente las referencias a un modelo de Entity Framework, y volver a compilar el lado del proyecto dio un paso al paso de este error al andamiar. Una vez que termino el andamio, elimino el comentario del código.

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

Recibo este error cada vez que envío el formulario; tampoco se llama al método de acción debido a esto:

Un artículo con la misma clave ya ha sido agregado.

Y los detalles de la excepción:

[ArgumentException: un elemento con la misma clave ya se ha agregado.]
System.ThrowHelper.ThrowArgumentException (recurso ExceptionResource) +52
System.Collections.Generic.Dictionary`2.Insert (tecla TKey, valor de TValue, Boolean agregar) +9382923 System.Linq.Enumerable.ToDictionary (origen de IEnumerable`1, selector de clave Func`2, elemento de Func`2, Comparador de desigualdad de IEqualityComparer`1 ) +252
System.Linq.Enumerable.ToDictionary (fuente de IEnumerable`1, selector de clave de Func`2, comparador de igualdad de IEquality`1) +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 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, etiqueta de objeto) +54
System.Web.Mvc.Async.AsyncResultWrapper.End (IAsyncResult asyncResult, etiqueta Object) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
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 (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> <%} %>


En mi caso, la raíz del problema era el nombre de propiedad duplicado en el cliente json, que solo difería por la distinción entre mayúsculas y minúsculas.


Encontré la respuesta. Fue por las variables. Me gusta int a y string a. había dos variables con el mismo nombre.


Esto es lo que hice para descubrir la clave que se estaba agregando dos veces. Descargué el código fuente de http://referencesource.microsoft.com/DotNetReferenceSource.zip y configuré VS para depurar el código fuente. Inaugurado Dictionary.cs en VS ejecutó el proyecto, una vez que la página se carga, agregó una depuración en la línea ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate); y fue capaz de 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 era minúscula. Arreglé el modelo y ahora funciona el mismo código.


He tenido el mismo error. Y después de que ya pensé que mi mente estaba 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 Syncfusion y agregar referencias a los controles individuales de estos controles. (De Nuget)


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 algo de Ajax save donde estaba reconstruyendo el modelo para enviar de vuelta al servidor. Cuando inicié por primera vez la página, configuré mi modelo original a una variable:

var currentModel = result.Data;

Mi resultado. Los result.Data tienen una propiedad: result.Data.Items

Entonces, un tiempo después, hago algunas cosas y quiero ahorrar, a través de Ajax. Parte del proceso consiste en tomar una matriz de un proceso lateral y configurarla en mi propiedad currentModel.Items y enviar currentModel al servidor.

En mi Javascript, sin embargo, hice esto, en cambio:

currentModel.items = getData();

No lo entendí, pero en Visual Studio, aparecerá una letra minúscula automática en la primera letra para las propiedades de Javascript (podría ser una cuestión de ReSharper también). Luego, recibí el error exacto publicado por OP cuando intenté guardar porque currentModel ahora tiene currentModel.items AND currentModel.Items

Un simple cambio de "artículos" a "Artículos" solucionó el problema.


Mi problema fue que tenía una @ Url.Action y le envié dos veces un valor para la misma propiedad


Otra forma de encontrar este error es a partir de 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:

select @column1, @column2

Agregar nombres de columna evitará el error:

select @column1 as col1, @column2 as col2


Tenía 2 propiedades de modelo como esta

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

es extraño que arrojó este error para estos 2 jaja ..


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 Modelo derivado.

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

Lo cambié a

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

Ahora está funcionando bien.


Tuve el mismo problema, estaba haciendo un bucle sobre mi objeto y añadiendo el resultado a un Dictionary<string, string> y tuve un `Duplicate in the key from the database

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

item.x tenía un valor duplicado


Tuve el mismo problema. Me apareció después de migrar a MVC 5 desde MVC 3.

Tenía una plantilla de editor personalizado y tuve que usarla así antes:

@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField", this.ViewData)

Para resolver el problema, tuve que eliminar el objeto ViewData pasaba. Así que al final tuve:

@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField")

Espero eso ayude.


Tuve el problema no en mi modelo C #, sino en el objeto javascript que estaba publicando con AJAX. Estoy usando Angular para el enlace y tenía un campo de Notes mayúscula en la página, mientras que mi objeto C # esperaba notes minúsculas. Un error más descriptivo estaría bien.

DO#:

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

Angular / Javascript:

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


Tuve un problema similar y descubrí que era porque tenía una propiedad pública de nombre similar (que debería haber sido privada) que solo difería en el caso.

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

debería haber sido

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


IndexAttribute esto en MVC 5 y Visual Studio Express 2013. Tenía dos propiedades con un IndexAttribute como a continuación. El comentario de uno de ellos y la recompilación dieron como resultado el andamiaje del controlador MVC 5 con vistas, utilizando Entity Framework como éxito. Misteriosamente, cuando descomentaba el atributo, volví a compilarlo y lo intenté de nuevo, el scaffolder funcionó perfectamente.

Tal vez el modelo de datos de la entidad subyacente o "algo" fue almacenado en caché / dañado, y eliminar y volver a agregar IndexAttribute simplemente provocó una reconstrucción de ese "algo".

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


Lo más probable es que tenga un modelo que contenga la misma propiedad dos veces . Tal vez estés usando algo 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.