1. ホーム
  2. asp.net-mvc

[解決済み】同じキーのアイテムがすでに追加されています。

2022-01-23 12:12:13

質問

フォームを送信するたびにこのエラーが発生し、このためにアクションメソッドが呼び出されません。

同じキーのアイテムがすでに追加されています。

そして、例外の詳細。

[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) ソース, Func`2 キーセレクタ, Func`2 要素セレクタ, 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 バインドコンテキスト, プロパティディスクリプタ propertyDescriptor) +392
System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext バインドコンテキスト) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext バインドコンテキスト, オブジェクトモデル) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext バインドコンテキスト) +2504
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext バインドコンテキスト) +548
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext ControllerContext, 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, オブジェクトタグ) +54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult) asyncResult, オブジェクトタグ) +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 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>
      <%} %>

解決方法は?

最も可能性が高い というモデルをお持ちの場合、そのモデルは は同じプロパティを2回含んでいます。 . おそらく new を使用してベースプロパティを非表示にしています。

解決策は、プロパティをオーバーライドするか、別の名前を使用することです。

モデルを共有していただければ、より詳しく説明できると思います。