已添加具有相同键的项目

use*_*922 130 asp.net-mvc

每当我提交表单时我都会收到此错误,因为这样就没有调用action方法:

已添加具有相同键的项目.

和例外细节:

[ArgumentException:已经添加了具有相同键的项.]
System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)+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比较器)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.W eb.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(IAsync 结果_)+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 asyncResult)+52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+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>
      <%} %>
Run Code Online (Sandbox Code Playgroud)

Ali*_*tad 208

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

解决方案是覆盖属性或使用其他名称.

如果您分享您的模型,我们将能够详细说明.

  • 在C#中,比方说,如果你有variable1和Variable1(它会抛出错误).另外,检查以确保没有类似的edmx名称(表列具有"CURRENCY",其中一个导航属性名称具有"货币") (14认同)
  • @Naveen太棒了!我看到这可以编译但是在这里抛出错误.框架的某些部分(与C#不同)不区分大小写. (7认同)
  • 有人会知道如何识别哪个是"同一把钥匙?" (7认同)
  • 我在摆弄一些视图模型(添加了 Id 属性)后开始得到这个。错误在于,JS 已经在对象上添加了“id”(小写 id)以进行某些 UI 管理,但是在提交时,JSON 对象同时具有“Id”和“id”属性,它们映射到中的相同键ASP.NET 的模型绑定器,因此出现此错误。 (2认同)
  • PS:这在MVC3中是允许的,但在MVC5中不允许。不知道为什么这已经改变了。 (2认同)

小智 20

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

public class BaseviewModel{
  public int UserId { get; set; }
}


 public class Model : BaseViewModel
 {
     public int UserId { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

我改变了

public class BaseviewModel{
   public int UserId { get; set; }
}


public class Model : BaseViewModel
{
    public int User_Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在工作正常.


Hal*_*Hal 12

我有一个类似的问题,发现这是因为我有一个类似命名的公共财产(应该是私人的),只是在案件中有所不同.

public string PropertyName {get;set;} // actually set propertyName, get propertyName
public string propertyName {get;set;}
Run Code Online (Sandbox Code Playgroud)

本来应该

public string PropertyName {get;set;} 
private string propertyName {get;set;}
Run Code Online (Sandbox Code Playgroud)


Cur*_*min 12

我有2个这样的模型属性

public int LinkId {get;set;}
public int LinkID {get;set;}
Run Code Online (Sandbox Code Playgroud)

奇怪的是它为这2个哈哈投掷了这个错误..


Jas*_*aat 6

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

C#:

class Post {
    public string notes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

角/ JavaScript的:

<input ng-model="post.Notes" type="text">
Run Code Online (Sandbox Code Playgroud)

  • 这是一个稍微不同的答案,我的C#类中没有一个具有不同情况的重复属性,但是发送给我的控制器的JSON确实如此.如果他们无法在C#代码中找到问题,那么认为它可能会与其他搜索同一问题的人派上用场. (2认同)

Min*_*iel 5

我遇到了同样的问题,我正在foreach遍历我的对象并将结果添加到 a 中,Dictionary<string, string>并且我在数据库中的键中出现了“重复”

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

        }
Run Code Online (Sandbox Code Playgroud)

item.x 有重复值