每当我提交表单时都会收到此错误,因为这样就没有调用action方法:
已添加具有相同键的项目。
异常细节:
[ArgumentException:带有。的项目 已添加相同的密钥。]
System.ThrowHelper.ThrowArgumentException(ExceptionResource 资源)+52
System.Collections.Generic.Dictionary`2.Insert(TKEY的 key,TValue值,布尔加法) +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 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的 结果)+38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8836913 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步,布尔& 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>
<%} %>
答案 0 :(得分:198)
很可能是,你的模型包含两次相同的属性。也许你正在使用new
隐藏基本属性。
解决方案是覆盖属性或使用其他名称。
如果您分享您的模型,我们将能够详细说明。
答案 1 :(得分:19)
我遇到了同样的问题,这就是我解决它的方法。我的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; }
}
现在工作正常。
答案 2 :(得分:12)
我遇到了类似的问题,发现这是因为我有一个类似命名的公共财产(应该是私有的),只是情况不同。
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;}
答案 3 :(得分:11)
我有2个这样的模型属性
public int LinkId {get;set;}
public int LinkID {get;set;}
奇怪的是它为这2个哈哈投掷了这个错误..
答案 4 :(得分:6)
我的问题不在我的C#模型中,而是在我使用AJAX发布的javascript对象中。我正在使用Angular进行绑定,并且在页面上有一个大写的Notes
字段,而我的C#对象期待小写notes
。更具描述性的错误肯定会很好。
C#:
class Post {
public string notes { get; set; }
}
角/使用Javascript:
<input ng-model="post.Notes" type="text">
答案 5 :(得分:3)
我找到了答案。这是因为变量。像int a和string a。有两个同名的变量。
答案 6 :(得分:3)
我有同样的问题,我foreach
循环我的对象并将结果添加到Dictionary<string, string>
中,我在数据库的密钥中有一个副本
foreach (var item in myObject)
{
myDictionary.Add(Convert.ToString(item.x),
item.y);
}
item.x
有重复值
答案 7 :(得分:2)
我的问题是我有一个@ Url.Action并且我已经通过两次相同属性的值发送了
答案 8 :(得分:1)
在MVC 5中,我发现暂时注释掉对实体框架模型的引用,并重新编译项目端在脚手架时出现了这个错误。完成脚手架后,我取消注释代码。
public Guid CreatedById { get; private set; }
// Commented out so I can scaffold:
// public virtual UserBase CreatedBy { get; private set; }
答案 9 :(得分:1)
我想添加一个我在这里看不到的答案。它与已接受的答案非常相关,但是,我的模型上没有重复的属性,这是我的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
&#34;项目&#34;的简单更改到&#34;项目&#34;解决了这个问题。
答案 10 :(得分:1)
我在MVC 5和Visual Studio Express 2013中看到了这个。我有两个属性IndexAttribute
,如下所示。注释掉其中一个并重新编译导致使用实体框架成功构建具有视图的MVC 5控制器。神奇的是,当我取消注释属性,重新编译并再次尝试时,脚手架运行得很好。
也许是基础实体数据模型或&#34;某事物&#34;已被缓存/损坏,删除并重新添加IndexAttribute
只会触发重建#34;
[Index(IsUnique = true)]
public string Thing1 { get; set; }
[Index(IsUnique = true)]
public string Thing2 { get; set; }
答案 11 :(得分:1)
以下是我发现要添加两次的密钥的方法。我从http://referencesource.microsoft.com/DotNetReferenceSource.zip下载了源代码并将VS设置为调试框架源代码。在VS中打开Dictionary.cs运行项目,一旦页面加载,在行ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
添加了一个调试,并且能够看到'key'值。我意识到在JSON中,变量的一个字母是大写的,但在我的模型中它是小写的。我修复了模型,现在相同的代码工作。
答案 12 :(得分:0)
就我而言,这是因为我在 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)
);
}
}
答案 13 :(得分:0)
答案 14 :(得分:0)
我有这个确切的错误,不是因为属性名称,而是因为有重复的自定义属性值。
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
}
答案 15 :(得分:0)
我在DBContext上遇到了这个问题。 当我尝试在Package Manager控制台中运行更新数据库以添加迁移时出现错误:
公共虚拟IDbSet状态{组; }
问题在于类型和名称相同。 我将其更改为:
公共虚拟IDbSet状态{组; }
答案 16 :(得分:0)
我面临类似的例外。检查所有列的标题名称(来自数据库中的选择查询)是否与模型类中的属性名称完全匹配。
答案 17 :(得分:0)
我有同样的错误。当我检查代码时,我发现在我的有角(字体端)一侧声明了“ GET”请求,而在ASP.net(后端)那侧声明了“ POST”请求。在两侧都设置POST / GET。然后解决了错误。
答案 18 :(得分:0)
就我而言,仅在编译代码时,它就可以正常运行。但是,调用具有字典(如示例代码)的静态类的静态类的静态字段之一会引发异常。
示例代码
public static AClass
{
public static Dictionary<string, string> ADict = new Dictionary<string, string>()
{
{"test","value1"},{"test","value2"},
};
}
说明 ADict已将“测试”键添加了两次。因此,当您调用静态类时,它将引发异常。
答案 19 :(得分:0)
我有相同的错误,但差异原因是b / c。使用实体框架。在共享我的代码和解决方案之前,我还需要在这里添加一件事,我在控制器方法上有一个断点,但它并没有在那里中断,只是抛出了异常500内部服务器错误。
我正在通过ajax将数据从视图发布到控制器(http发布)。我期望作为参数的模型是一个类。它是通过其他一些类继承的。
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类中删除重复的字段,它就像一个超级按钮。
答案 20 :(得分:0)
遇到此错误的另一种方法是使用带有未命名列的数据集。将数据集序列化为JSON时会引发错误。
此声明将导致错误:
select @column1, @column2
添加列名可以防止错误:
select @column1 as col1, @column2 as col2
答案 21 :(得分:0)
在我的情况下,问题的根源是客户端json中的重复属性名称,只是区分大小写。
答案 22 :(得分:0)
我遇到了同样的错误。在我已经认为我的思想被打破之后,因为我已经重命名了几乎所有模型属性,解决方案是删除所有Syncfusion控件上的一个引用并添加对此控件的各个控件的引用。 (来自Nuget)
答案 23 :(得分:0)
我有同样的问题。从MVC 3迁移到MVC 5之后,它出现在我身上。
我有自定义编辑器模板,之前必须像这样使用它:
@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField", this.ViewData)
要解决问题,我必须删除传递ViewData
对象。所以最后我有:
@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField")
希望它有所帮助。