已添加具有相同键的项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已添加具有相同键的项目相关的知识,希望对你有一定的参考价值。

每当我提交表单时,我都会收到此错误,因为这样就没有调用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 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 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>
      <% %>

答案

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

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

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

另一答案

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

也许底层实体数据模型或“某事”被缓存/损坏,删除和重新添加IndexAttribute只是触发了重建那个“某事”。

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

[Index(IsUnique = true)]
public string Thing2  get; set; 
另一答案

在MVC 5中,我发现暂时注释掉对实体框架模型的引用,并重新编译项目端在脚手架时执行了此错误。一旦我完成脚手架,我取消注释代码。

public Guid CreatedById  get; private set; 
// Commented out so I can scaffold: 
// public virtual UserBase CreatedBy  get; private set; 
另一答案

我想补充一下我在这里看不到的答案。它与接受的答案非常相关,但是,我的模型上没有重复的属性,这是我的javascript的一个问题。

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

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

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

另一答案

我有同样的问题。在从MVC 3迁移到MVC 5后,它似乎在我看来。

我有自定义编辑器模板,不得不像以前一样使用它:

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

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

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

希望能帮助到你。

另一答案

我有同样的错误。在我已经认为我的思想被打破之后,因为我已经重命名了几乎所有模型属性,解决方案是删除所有Syncfusion控件上的一个引用并添加对此控件的各个控件的引用。 (来自Nuget)

另一答案

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

另一答案

遇到此错误的另一种方法是来自具有未命名列的数据集。将数据集序列化为JSON时会引发错误。

此语句将导致错误:

select @column1, @column2

添加列名将防止错误:

select @column1 as col1, @column2 as col2
另一答案

我有相同的错误,但差异原因的b / c。使用实体框架。在我分享我的代码和解决方案之前,我需要在这里添加一件事,我在控制器方法上有一个断点,但它没有打破那里,只是抛出异常500内部服务器错误。

我通过ajax(http post)将数据从视图发布到控制器。我期待作为参数的模型是一个类。它与其他一些类一起继承。

public class PurchaseOrder : CreateUpdateUserInfo
    
        public PurchaseOrder()
        
            this.Purchase_Order_Items = new List<clsItem>();
        

        public int purchase_order_id  get; set; 
        public Nullable<int> purchase_quotation_id  get; set; 
        public int supplier_id  get; set; 
        public decimal flat_discount  get; set; 
        public decimal total  get; set; 
        public decimal net_payable  get; set; 
        public bool is_payment_complete  get; set; 
        public decimal sales_tax  get; set; 
        public DateTime CreatedOn  get; set; 
        public int CreatorUserID  get; set; 
        public DateTime UpdatedOn  get; set; 
        public int UpdatorUserID  get; set; 
        public bool IsDeleted  get; set; 
        public List<clsItem> Purchase_Order_Items  get; set; 
    

 public class CreateUpdateUserInfo
    
        public DateTime CreatedOn  get; set; 
        public int CreatorUserID  get; set; 
        public string CreatorUserName  get; set; 
        public DateTime UpdatedOn  get; set; 
        public int UpdatorUserID  get; set; 
        public string UpdatorUserName  get; set; 
        public bool IsDeleted  get; set; 
    

在视野中

                var model = 
                supplier_id : isNaN($scope.supplierID) || 0 ? null : $scope.supplierID,
                flat_discount : 0,
                total : $scope.total,
                net_payable :  $scope.total,
                is_payment_complete :  true,
                sales_tax:0,
                Purchase_Order_Item: $scope.items
            ;
            var obj = 
                method: 'POST',
                url: 'Purchase/SaveOrder',
                dataType: 'json',
                data: JSON.stringify(model),
                headers:  "Content-Type": "application/json" 
            ;

            var request = $rootScope.AjaxRequest(obj);
            request.then(function (response) 
                var isError = response.data.MessageType === 1;
                $rootScope.bindToaster(response.data.MessageType,response.data.Message);
                //$('html, body').animate( scrollTop: 0 , 'slow');
                if(!isError)
                    //$scope.supplierID =undefined;
                
            , function (response) 
                $rootScope.bindToaster(2,response.data);
                console.log(response);
            );

只需从Purchase Order类中删除重复的字段,它就像一个魅力。

另一答案

就我而言,只是在编译代码时,它运行得很好。但是调用静态类的静态字段之一,其中包含类似示例代码的字典,会抛出异常。

示例代码

public static AClass

    public static Dictionary<string, string> ADict = new Dictionary<string, string>()
        
            "test","value1","test","value2",
        ;

解释ADict已经添加了两次“test”键。因此,当您调用静态类时,它会抛出异常。

另一答案

我有同样的错误。当我检查代码然后我发现在我的angular(字体结束)方面声明“GET”请求并在ASP.net(后端)方面声明“POST”请求。设置POST / GET两侧的任何一个。然后解决了错误。

另一答案

我有同样的问题,这就是我解决它的方式。我的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;

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

另一答案

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

C#:

class Post 
    public string notes  get; set; 

角/ JavaScript的:

<input ng-model="post.Notes" type="text">
另一答案

我找到了答案。这是因为变量。像int a和string a。有两个同名的变量。

另一答案

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

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

        

item.x有重复的价值

另一答案

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

另一答案

这是我做的,找出两次添加的密钥。我从解决错误 - “返回 404 时已添加具有相同键的项目”

已添加具有相同键的实体框架核心 3.1.6 项

已添加具有相同密钥的项目 - 仅处于发布模式

[解决问题]未知的生成错误“已添加了具有相同键的项”(SVN进行更新后冲突,冲突解决等操作导致,并且无法定位到代码)

GET 调用:已添加具有相同密钥的项目。键:标识

已添加具有相同键的项-查询中没有重复列