具有相同密钥的项目已被添加

每当我提交表单时,我也会得到这个错误,因为这个操作方法没有被调用:

具有相同密钥的项目已被添加。

而exception的细节:

[ArgumentException:具有相同密钥的项目已被添加。]
System.ThrowHelper.ThrowArgumentException(ExceptionResource资源)+52
System.Collections.Generic.Dictionary`2.Insert(TKey key,TValue value,Boolean add)+9382923 System.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 comparer)+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,Object tag)+54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult,Object标记)+40
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult结果)+38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8836913 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)+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> <%} %> 

最有可能的是 ,你有两次包含相同属性的模型。 也许你正在使用new来隐藏基本属性。

解决方法是覆盖该属性或使用其他名称。

如果你分享你的模型,我们将能够详细阐述。

我有同样的问题,这就是我解决它的方法。 我有一个重复的属性在我的ViewModel具有相同的名称。 一个属性在BaseViewModel中,另一个属于派生模型。

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

我改变了

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

现在它工作正常。

我有类似的问题,发现这是因为我有一个类似命名的公共财产(应该是私人的),只是情况不同。

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

本来应该

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

我有这样的2个模型属性

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

这是奇怪的是,这两个哈哈抛出这个错误..

我的问题不在我的C#模型中,而是在使用AJAX发布的javascript对象中。 我正在使用Angular进行绑定,并且在页面上有一个大写的Notes字段,而我的C#对象期待小写的notes 。 一个更具描述性的错误肯定会很好。

C#:

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

angular/ JavaScript的:

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

我find了答案,那是因为变数。 像int a和string a一样。 有两个同名的variables。

我有同样的问题,我是foreach循环我的对象,并将结果添加到一个Dictionary<string, string> ,我有一个`从数据库中的密钥复制

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

item.x有一个重复的值

这是我做了什么来找出被添加两次的密钥。 我从http://referencesource.microsoft.com/DotNetReferenceSource.zip下载了源代码,并将VS设置为debugging框架源代码。; 在VS中打开Dictionary.cs运行该项目,一旦页面加载,在ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);行添加一个debuggingThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate); 并能看到“关键”的价值。 我意识到在JSON中,variables的一个字母是大写,但在我的模型中是小写。 我修复了模型,现在相同的代码工作。

我在MVC 5和Visual Studio Express 2013中打了这个。我有两个属性,像下面的IndexAttribute 。 注释掉其中之一并重新编译导致MVC 5控制器的视图脚手架,使用entity framework成功。 神秘的是,当我取消注释属性,重新编译,并再次尝试,脚手架运行得很好。

也许底层实体数据模型或“东西”被caching/损坏,删除和重新添加IndexAttribute只是触发重build的“东西”。

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

在MVC 5中,我发现临时注释了对entity framework模型的引用,并且重新编译项目端时脚手架出现了这个错误。 一旦我完成脚手架,我取消注释的代码。

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

我想添加一个我在这里没有看到的答案。 这与被接受的答案是非常相关的,但是,我的模型没有重复的属性,这是我的Javascript的一个问题。

我正在做一些Ajax保存,我正在重build模型发送回服务器。 当我第一次初始化页面时,我将原始模型设置为一个variables:

 var currentModel = result.Data; 

我的result.Data有一个属性: result.Data.Items

所以,一段时间后,我做了一些事情,并希望通过Ajax保存。 这个过程的一部分是从一个进程获取一个数组,并将其设置为我的currentModel.Items属性,并将currentModel发送到服务器。

然而,在我的Javascript中,我是这样做的:

 currentModel.items = getData(); 

我没有抓住它,但在Visual Studio中,它会自动小写Javascript属性的第一个字母(它也可能是一个ReSharper的东西)。 然后,当我试图保存时,我得到了OP发布的确切错误,因为currentModel现在有currentModel.itemscurrentModel.Items

从“项目”到“项目”的简单更改解决了问题。

我的问题是,我有一个@ Url.Action,我已经通过一个值相同的属性两次

我有同样的问题。 从MVC 3迁移到MVC 5之后,它就出现了。

我有自定义编辑器模板,必须像这样使用它:

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

要解决问题,我必须删除传递的ViewData对象。 所以最后我有:

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

希望它有帮助。

我有同样的错误。 而且,在我已经认为我的思维已经坏了,因为我已经重新命名了几乎所有的模型属性,解决方法是删除所有Syncfusion控件上的一个引用,并添加对这个控件的单独控件的引用。 (来自Nuget)

在我的情况下,问题的根源是客户端JSON中重复的属性名称,只是区分大小写。