Я получаю эту ошибку всякий раз, когда я отправляю форму, и метод действия не вызывается из-за этого:
Элемент с таким же ключом уже добавлен.
И детали исключения:
[ArgumentException: элемент с тем же ключом уже добавлен.]
System.ThrowHelper.ThrowArgumentException (ресурс ExceptionResource) +52
System.Collections.Generic.Dictionary`2.Insert (ключ TKey, значение TValue, логическое добавление) +9382923 система .Linq.Enumerable.ToDictionary (источник IEnumerable`1, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 Comparer) +252
System.Linq.Enumerable.ToDictionary (Источник IEnumerable`1, Func`2 keySelector, IEqualityComparer Сравниватель) +91
System.Web.Mvc.ModelBindingContext.get_PropertyMetadata () +228 System.Web.Mvc.DefaultModelBinder.BindProperty (ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, свойствоDescriptor) +392
System.Web.Mvc.DefaultModelBinder.BindProperties (ControllerContext controllerContext, ModelBindingContext BindingContext) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext BindingContext, модель объекта) +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 параметр-код сценария контекста контекста
System.Web.Mvc.ControllerActionInvoker.GetParameterValues (ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +rol.Mone.Control.Exvent.ControlSec.Conservice.exe (8). System.Tec2CoreControl.ec. .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, тег объекта) +54
System.Web.Mvc.Async.AsyncResultWrapper. Конец (IAsyncResult asyncResult, тег объекта) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcess +Rescess + Regress
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный синхронно) +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>
<%} %>
источник
Ответы:
Скорее всего , у вас есть модель, которая содержит одно и то же свойство дважды . Возможно, вы используете,
new
чтобы скрыть базовое свойство.Решение состоит в том, чтобы переопределить свойство или использовать другое имя.
Если вы поделитесь своей моделью, мы сможем разработать более подробно.
источник
У меня была такая же проблема, и вот как я ее решил. У меня было дублированное свойство с тем же именем в моей ViewModel. Одно свойство было в BaseViewModel, а другое - в производной модели.
Я изменил это на
Сейчас работает нормально.
источник
У меня была похожая проблема, и я обнаружил, что это связано с тем, что у меня была публичная собственность с аналогичным названием (которая должна была быть частной), которая отличалась только в случае.
должно было
источник
У меня было 2 свойства модели, как это
странно, что он выкинул эту ошибку за эти 2 хаха ..
источник
У меня была проблема не в моей модели C #, а в объекте javascript, который я публиковал с использованием AJAX. Я использую Angular для привязки, и у меня было заглавное
Notes
поле на странице, в то время как мой объект C # ожидал строчные буквыnotes
. Более описательная ошибка наверняка будет хорошей.C #:
Угловой / Javascript:
источник
У меня была та же проблема, я
foreach
зацикливался на своем объекте и добавлял результат в a,Dictionary<string, string>
и у меня был `Duplicate в ключе из базы данныхitem.x
имел двойное значениеисточник
Я нашел ответ. Это было из-за переменных. Как int a и строка a. там были две переменные с одинаковыми именами.
источник
Вот что я сделал, чтобы узнать ключ, который добавлялся дважды. Я загрузил исходный код с http://referencesource.microsoft.com/DotNetReferenceSource.zip и настроил VS для отладки исходного кода фреймворка. Открыл Dictionary.cs в VS, запустил проект, как только страница загрузилась, добавил отладку в строку
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
и смог увидеть значение «ключа». Я понял, что в JSON одна буква переменной была в верхнем регистре, но в моей модели это была строчная буква. Я исправил модель, и теперь тот же код работает.источник
Я ударил это в MVC 5 и Visual Studio Express 2013. У меня было два свойства с
IndexAttribute
подобным ниже. Комментирование одного из них и перекомпиляция привели к тому, что контроллер MVC 5 был очищен с помощью представлений, что позволило успешно использовать Entity Framework. Таинственным образом, когда я раскомментировал атрибут, перекомпилировал и попытался снова, скаффолдер работал нормально.Возможно, базовая модель данных объекта или «что-то» было кэшировано / повреждено, и удаление и повторное добавление
IndexAttribute
просто вызвало перестройку этого «чего-то».источник
В MVC 5 я обнаружил, что временное комментирование ссылок на модель Entity Framework и перекомпиляция стороны проекта перешло эту ошибку при создании леса. Как только я закончу строительные леса, я раскомментирую код.
источник
Я хотел бы добавить ответ, который я не вижу здесь. Это очень связано с принятым ответом, однако у меня не было дублированных свойств в моей модели, это была проблема с моим Javascript.
Я делал некоторые сохранения Ajax, где я перестраивал модель для отправки обратно на сервер. Когда я впервые инициализировал страницу, я установил исходную модель в переменную:
Мой
result.Data
имеет свойство:result.Data.Items
Итак, через некоторое время я делаю некоторые вещи и хочу сохранить их через Ajax. Часть процесса заключается в получении массива из какого-либо побочного процесса и установке его на мой
currentModel.Items
свойство и отправкеcurrentModel
на сервер.В моем Javascript, однако, я сделал это вместо этого:
Я не уловил его, но в Visual Studio он будет автоматически в нижнем регистре первой буквы для свойств Javascript (это может быть тоже вещь ReSharper). Затем я получил точную ошибку, опубликованную OP, когда попытался сохранить, потому что currentModel теперь имеет
currentModel.items
ANDcurrentModel.Items
Простое изменение «предметов» на «Предметы» решило проблему.
источник
Моя проблема заключалась в том, что у меня было действие @ Url.Action, и я дважды отправил значение для одного и того же свойства
источник
В моем случае, просто когда вы компилируете код, он работает просто отлично. Но вызов одного из статического поля статического класса, имеющего словарь, подобный образцу кода, вызывает исключение.
Образец кода
Пояснение ADict имеет дважды добавленный ключ «test». Итак, когда вы вызываете статический класс, он выдает исключение.
источник
У меня была такая же проблема. Мне кажется, после перехода на MVC 5 из MVC 3.
У меня был собственный шаблон редактора, и я должен был использовать его так:
Чтобы решить проблему, мне пришлось удалить проходящий
ViewData
объект. Итак, в конце у меня было:Надеюсь, поможет.
источник
У меня была такая же ошибка. И после того, как я уже думал, что мой разум нарушен, потому что я переименовал почти все свойства моих моделей, решением было удалить одну ссылку на все элементы управления Syncfusion и добавить ссылки на отдельные элементы управления этих элементов управления. (От Nuget)
источник
В моем случае корень проблемы заключался в дублировании имени свойства в клиентском json, которое отличалось только чувствительностью к регистру.
источник
Другой способ встретить эту ошибку - это набор данных с неназванными столбцами. . Ошибка генерируется, когда набор данных сериализуется в JSON.
Это утверждение приведет к ошибке:
Добавление имен столбцов предотвратит ошибку:
источник
У меня была такая же ошибка, но б / с по разным причинам. Использование Entity Framework. Еще одна вещь, которую я должен добавить здесь, прежде чем я поделюсь своим кодом и решением, у меня была точка останова на методе контроллера, но он не ломался там, просто выдает исключение 500 внутренняя ошибка сервера.
Я отправлял данные из представления на контроллер через ajax (http post). Модель, которую я ожидал в качестве параметра, была классом. Это было унаследовано с другим классом.
и ввиду
Просто удалили дублированные поля из класса PurchaseOrder, и это сработало как прелесть.
источник
У меня была такая же ошибка. Когда я проверил код, то обнаружил, что объявляю запрос «GET» на моей угловой стороне (font-end) и объявляю запрос «POST» на стороне ASP.net (back-end). Установите POST / GET любой в обе стороны. Тогда решил ошибку.
источник
Я столкнулся с подобным исключением. Проверьте, все ли столбцы имеют имена заголовков (из запроса на выборку в базе данных) с точно совпадающими именами свойств в классе модели.
источник
У меня была эта проблема в DBContext. Возникла ошибка при попытке запустить update-database в консоли диспетчера пакетов для добавления миграции:
общедоступный виртуальный IDbSet Status {get; устанавливать; }
Проблема заключалась в том, что тип и имя были одинаковыми. Я изменил это на:
публичные виртуальные статусы IDbSet {get; устанавливать; }
источник