已添加具有相同键的项目
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.items
和currentModel.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 时已添加具有相同键的项目”