ChatGPT解决这个技术问题 Extra ChatGPT

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

每当我提交表单时,我都会收到此错误,并且由于以下原因未调用操作方法:

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

以及异常详细信息:

[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 比较器) +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,对象标记)+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

查看页面

<%@ 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>
      <%} %>

您需要为此添加更多上下文。向我们展示控制器代码并描述您正在采取的确切操作。自己做一些调试,这样你的问题就更详细了,而不仅仅是一大堆代码/堆栈。
我非常仔细地检查了我发布的 JSON,发现了一个重复的属性——一个拼写为 CustomerID,一个拼写为 CustomerId——通过 javascript 拼写错误,这两个属性都已添加到我发布的 JSON 中,因此只需提醒一下即可解决此问题我。

A
Aliostad

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

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

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


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

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

现在它工作正常。


谢谢,仅供参考,即使基础和模型具有相同的属性名称但大小写不同,也会发生这种情况,例如 Base:User, Model:user
b
benPearce

我有 2 个这样的模型属性

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

奇怪的是它为这两个哈哈抛出了这个错误..


H
Hal

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

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;}

J
Jason Goemaat

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

C#:

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

角/Javascript:

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

这是一个稍微不同的答案,我的 C# 类都没有不同情况下的重复属性,但是发送到我的控制器的 JSON 有。如果其他人在 C# 代码中找不到问题,则认为它可能会派上用场。
和戈马特一样。正在发送的 JSON 对象有重复的名称,即使我绑定的 c# 对象完全忽略了这些键,它仍然失败。这很愚蠢,甚至可能是我脑海中的一个错误。我没有控制正在发送的 JSON 对象,所以我无法解释发送的所有额外字段。
M
Mina Gabriel

我遇到了同样的问题,我正在 foreach 循环我的对象并将结果添加到 Dictionary<string, string> 并且我在数据库中的键中有一个“重复”

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

        }

item.x 有重复值


u
user650922

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


A
Ahmet Remzi EKMEKCI

就我而言,只需编译代码,它就可以正常运行。但是调用具有像示例代码一样的字典的静态类的静态字段之一,会引发异常。

示例代码

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

解释 ADict 已添加两次“测试”键。因此,当您调用静态类时,它会引发异常。


b
bvoleti

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


J
Jeremy Cook

我在 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; }

J
Jeremy Cook

在 MVC 5 中,我发现临时注释掉对实体框架模型的引用,并重新编译项目方在搭建脚手架时会出现此错误。完成脚手架后,我取消注释代码。

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

J
JasonWilczak

我想补充一个我在这里看不到的答案。它与接受的答案非常相关,但是,我的模型上没有重复的属性,这是我的 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.items AND currentModel.Items

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


a
abiNerd

我的问题是我有一个 @Url.Action 并且我已经通过同一属性的值发送了两次


M
Mariusz

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

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

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

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

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

希望能帮助到你。


A
AlfredBauer

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


k
kubajs

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


u
user9375338

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

该语句将导致错误:

select @column1, @column2

添加列名将防止错误:

select @column1 as col1, @column2 as col2

A
Adeel Shekhani

我有同样的错误,但 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);
            });

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


S
Sanjib Dhar

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


V
Vikas

我遇到了类似的例外。检查所有列是否具有与模型类中的属性名称完全匹配的标题名称(来自数据库中的选择查询)。


L
LuTheZy

我在 DBContext 上遇到了这个问题。当我尝试在包管理器控制台中运行更新数据库以添加迁移时出现错误:

公共虚拟 IDbSet 状态 { 获取;放; }

问题是类型和名称相同。我将其更改为:

公共虚拟 IDbSet 状态 { 获取;放; }


A
Ahmad

我有这个确切的错误,不是因为属性名称,而是因为具有重复的自定义属性值。

class Person {
  [Column("first_name")]
  public string FirstName { get; set; }

  [Column("first_name"]  // I forgot to change the custom attribute value
  public string LastName { get; set; }

  public static IEnumerable<Name> Names = db.Query<Name>(""); // error
}

N
Nguyễn Văn Phong

2021 年 - 3 月

dotnetfiddle 上的演示

https://i.stack.imgur.com/Aliu9.png


T
Tiago Santos

就我而言,这是因为我在 for 中使用了 JoinAlias。

            foreach (ISearchSpecsFilter item in searchFilter.SpecsFilter) {

                if (item.MinValue + item.MinValue != 0) {

                    result = result
                        .WithSubquery
                        .WhereExists(
                            workDetailEntity
                                .JoinAlias(j => j.WorkDetailLabel, () => workDetailLabelEntity)
                                .JoinAlias(j => workDetailLabelEntity.WorkLabel, () => workLabelEntity)
                                .JoinAlias(j => workDetailLabelEntity.WorkUnitMeasureType, () => workUnitMeasureTypeEntity)
                                .Where(w => w.Work.WorkId == workEntity.WorkId && w.Value >= item.MinValue && w.Value <= item.MaxValue && workLabelEntity.WorkLabelId == item.WorkLabelId && workUnitMeasureTypeEntity.WorkUnitMeasureTypeId == (int)item.WorkUnitMeasure)
                                .Select(s => s.Work.WorkId)
                        );

                }

            }

C
Chamila Maddumage

我在执行一个Stord 过程时遇到了同样的问题,它已经返回了两个同名的列。在模型类中映射该列时存在冲突。要解决该问题,请始终为返回的列使用唯一名称。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅