Saya mendapatkan kesalahan ini setiap kali saya mengirimkan formulir juga metode tindakan tidak dipanggil karena ini:
Item dengan kunci yang sama telah ditambahkan.
Dan detail pengecualiannya:
[ArgumentException: Item dengan kunci yang sama telah ditambahkan.]
System.ThrowHelper.ThrowArgumentException (ExceptionResource resource) +52
System.Collections.Generic.Dictionary`2.Insert (kunci TKey, nilai TValue, Boolean add) +9382923 Sistem .Linq.Enumerable.ToDictionary (IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) +252
System.Linq.Enumerable.ToDictionary (sumber IEnumerable`1, Func`2 keySelector, IEqualityComparer` pembanding) +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.Model.DefaultModelBinder.BindComplex.Model 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, tag Objek) +54
System.Web.Mvc.Async.AsyncResultWrapper. Akhiri (IAsyncResult asyncResult, tag Objek) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (hasil IAsyncResult)
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (langkah IExecutionStep, Boolean & completeSynchronously) +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>
<%} %>
sumber
Jawaban:
Kemungkinan besar , Anda memiliki model yang berisi properti yang sama dua kali . Mungkin Anda menggunakan
new
untuk menyembunyikan properti dasar.Solusinya adalah menimpa properti atau menggunakan nama lain.
Jika Anda membagikan model Anda, kami dapat menjelaskan lebih lanjut.
sumber
Saya memiliki masalah yang sama dan inilah cara saya menyelesaikannya. Saya memiliki properti duplikat dengan nama yang sama di ViewModel saya. Satu Properti berada di BaseViewModel dan yang lainnya dalam Model turunan.
public class BaseviewModel{ public int UserId { get; set; } } public class Model : BaseViewModel { public int UserId { get; set; } }
Saya mengubahnya menjadi
public class BaseviewModel{ public int UserId { get; set; } } public class Model : BaseViewModel { public int User_Id { get; set; } }
Sekarang sudah berfungsi dengan baik.
sumber
Saya memiliki masalah yang sama dan menemukan bahwa itu karena saya memiliki properti publik bernama serupa (yang seharusnya bersifat pribadi) yang hanya berbeda dalam kasus.
public string PropertyName {get;set;} // actually set propertyName, get propertyName public string propertyName {get;set;}
seharusnya
public string PropertyName {get;set;} private string propertyName {get;set;}
sumber
Saya memiliki 2 properti model seperti ini
public int LinkId {get;set;} public int LinkID {get;set;}
aneh bahwa itu melemparkan kesalahan ini untuk 2 ini haha ..
sumber
Saya memiliki masalah bukan pada model C # saya, tetapi pada objek javascript yang saya posting menggunakan AJAX. Saya menggunakan Angular untuk mengikat dan memiliki
Notes
bidang kapital di halaman sementara objek C # saya mengharapkan huruf kecilnotes
. Kesalahan yang lebih deskriptif pasti menyenangkan.C #:
class Post { public string notes { get; set; } }
Sudut / Javascript:
<input ng-model="post.Notes" type="text">
sumber
Saya memiliki masalah yang sama, saya
foreach
mengulang objek saya dan menambahkan hasilnya ke aDictionary<string, string>
dan saya memiliki `Duplikat di kunci dari databaseforeach (var item in myObject) { myDictionary.Add(Convert.ToString(item.x), item.y); }
item.x
memiliki nilai duplikatsumber
Saya menemukan jawabannya karena variabelnya. Seperti int a dan string a. ada dua variabel dengan nama yang sama.
sumber
Inilah yang saya lakukan untuk menemukan kunci yang ditambahkan dua kali. Saya mengunduh kode sumber dari http://referencesource.microsoft.com/DotNetReferenceSource.zip dan menyiapkan VS ke sumber kerangka kerja debug. Membuka Dictionary.cs di VS menjalankan proyek, setelah halaman dimuat, menambahkan debug pada baris
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
dan dapat melihat nilai 'key'. Saya menyadari bahwa di JSON, satu huruf variabel menggunakan huruf besar, tetapi dalam model saya huruf kecil. Saya memperbaiki model dan sekarang kode yang sama berfungsi.sumber
Saya menekan ini di MVC 5 dan Visual Studio Express 2013. Saya memiliki dua properti dengan
IndexAttribute
seperti di bawah ini. Mengomentari salah satunya dan mengompilasi ulang menghasilkan scaffolding pengontrol MVC 5 dengan tampilan, menggunakan Entity Framework berhasil. Anehnya, ketika saya menghapus komentar atribut, mengkompilasi ulang, dan mencoba lagi, scaffolder berfungsi dengan baik.Mungkin model data entitas yang mendasari atau "sesuatu" telah di-cache / rusak, dan menghapus dan menambahkan kembali
IndexAttribute
hanya memicu pembangunan kembali "sesuatu" itu.[Index(IsUnique = true)] public string Thing1 { get; set; } [Index(IsUnique = true)] public string Thing2 { get; set; }
sumber
Di MVC 5 saya menemukan bahwa untuk sementara mengomentari referensi ke model Kerangka Entitas, dan mengompilasi ulang sisi proyek melangkahi kesalahan ini saat perancah. Setelah saya menyelesaikan perancah, saya menghapus komentar kodenya.
public Guid CreatedById { get; private set; } // Commented out so I can scaffold: // public virtual UserBase CreatedBy { get; private set; }
sumber
Saya ingin menambahkan jawaban yang tidak saya lihat di sini. Ini sangat terkait dengan jawaban yang diterima, namun, saya tidak memiliki properti duplikat pada model saya, itu adalah masalah dengan Javascript saya.
Saya melakukan beberapa penyimpanan Ajax di mana saya membangun kembali model untuk dikirim kembali ke server. Ketika saya pertama kali menginisialisasi halaman, saya menetapkan model asli saya ke variabel:
var currentModel = result.Data;
Saya
result.Data
memiliki properti:result.Data.Items
Jadi, suatu saat nanti, saya melakukan beberapa hal dan ingin menabung, lewat Ajax. Bagian dari proses ini adalah mengambil array dari beberapa proses samping dan mengaturnya ke
currentModel.Items
properti saya dan mengirimnyacurrentModel
ke server.Dalam Javascript saya, bagaimanapun, saya melakukan ini, sebagai gantinya:
currentModel.items = getData();
Saya tidak menangkapnya, tetapi di Visual Studio, itu akan otomatis menurunkan huruf pertama untuk properti Javascript (itu bisa menjadi hal ReSharper juga). Kemudian, saya mendapat kesalahan persis yang diposting oleh OP ketika saya mencoba menyimpan karena currentModel sekarang memiliki
currentModel.items
DANcurrentModel.Items
Perubahan sederhana dari "item" menjadi "Item" memperbaiki masalah.
sumber
Masalah saya adalah saya memiliki @ Url.Action dan saya telah mengirimkan nilai untuk properti yang sama dua kali
sumber
Dalam kasus saya, hanya ketika Anda mengkompilasi kode, itu berjalan dengan baik. Tetapi memanggil salah satu bidang statis dari kelas statis yang memiliki kamus seperti yang dimiliki kode sampel, akan memunculkan pengecualian.
Kode sampel
public static AClass { public static Dictionary<string, string> ADict = new Dictionary<string, string>() { {"test","value1"},{"test","value2"}, }; }
Penjelasan ADict memiliki kunci "test" yang ditambahkan dua kali. Jadi, ketika Anda memanggil kelas statis, itu melempar pengecualian.
sumber
Saya memiliki masalah yang sama. Tampak bagi saya setelah bermigrasi ke MVC 5 dari MVC 3.
Saya memiliki template editor khusus dan harus menggunakannya seperti ini sebelumnya:
@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField", this.ViewData)
Untuk mengatasi masalah saya harus menghapus
ViewData
objek yang lewat . Jadi pada akhirnya saya punya:@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField")
Semoga membantu.
sumber
Saya mengalami kesalahan yang sama. Dan setelah saya mengira pikiran saya rusak, karena saya telah mengganti nama hampir semua properti model saya, solusinya adalah menghapus satu referensi pada Semua Kontrol Syncfusion dan menambahkan referensi ke kontrol individu dari kontrol ini. (Dari Nuget)
sumber
Dalam kasus saya, akar masalahnya adalah nama properti duplikat di klien json yang hanya dibedakan berdasarkan sensitivitas huruf.
sumber
Cara lain untuk menghadapi kesalahan ini adalah dari kumpulan data dengan kolom tanpa nama . Kesalahan muncul ketika kumpulan data diserialkan ke dalam JSON.
Pernyataan ini akan menghasilkan kesalahan:
select @column1, @column2
Menambahkan nama kolom akan mencegah kesalahan:
select @column1 as col1, @column2 as col2
sumber
Saya memiliki kesalahan yang sama tetapi b / c alasan yang berbeda. Menggunakan framework Entity. Satu hal lagi yang perlu saya tambahkan di sini sebelum saya membagikan kode dan solusi saya, saya mengalami titik putus pada metode pengontrol tetapi tidak melanggar di sana, hanya membuang pengecualian 500 kesalahan server internal.
Saya memposting data dari tampilan ke pengontrol melalui ajax (http post). Model yang saya harapkan sebagai parameter adalah sebuah kelas. Itu diwarisi dengan beberapa kelas lain.
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; } }
dan terlihat
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); });
Cukup hapus bidang duplikat dari kelas PurchaseOrder dan itu bekerja seperti pesona.
sumber
Saya mengalami kesalahan yang sama. Ketika saya memeriksa kode tersebut maka saya menemukan bahwa menyatakan permintaan "GET" di sisi sudut (font-end) saya dan menyatakan permintaan "POST" di sisi ASP.net (back-end). Atur POST / GET salah satu di kedua sisi. Kemudian memecahkan kesalahan.
sumber
Saya menghadapi pengecualian serupa. Periksa apakah semua kolom memiliki nama header (dari kueri pemilihan dalam database) dengan nama properti yang sama persis di kelas model.
sumber
Saya memiliki masalah ini di DBContext. Mendapat kesalahan saat saya mencoba menjalankan update-database di konsol Package Manager untuk menambahkan migrasi:
Status IDbSet virtual publik {get; set; }
Masalahnya adalah jenis dan namanya sama. Saya mengubahnya menjadi:
Status IDbSet virtual publik {get; set; }
sumber