Heim >Backend-Entwicklung >C++ >Warum ist meine Dropdown -Liste 'das ViewData -Element mit Schlüssel' xxx 'vom Typ' System '.Int32 ', muss aber vom Typ 'iEnumerable'' sein?
ASP.NET MVC Dropdownlistfor Fehler: Geben Sie Mismatch
ein Dieser Artikel befasst
InvalidOperationException
DropDownListFor
Problem: "The ViewData item that has the key 'XXX' is of type 'System.Int32' but must be of type 'IEnumerable'."
Dieser Fehler entsteht, wenn die Eigenschaft Ihres Modells (z. B. ) an den Helfer gebunden ist, eine Ganzzahl (
) anstelle einer Sammlung ( oder ähnlich). Der XXX
Helfer erwartet eine Sammlung wählbarer Elemente, nicht einen einzelnen Ganzzahlwert, der das ausgewählte Element darstellt. DropDownListFor
int
IEnumerable<SelectListItem>
Ursache: DropDownListFor
Das Missverhältnis tritt auf, da die Formulareingabe einen einzelnen Ganzzahlwert (die ausgewählte ID) liefert, der Helfer jedoch eine Sammlung benötigt, um die Dropdown -Optionen zu füllen.
Beispielszenario:
Nehmen wir an, Sie haben ein Modell mit einer Eigenschaft für eine Kategorie -ID:
und eine Ansicht mit int
:
<code class="language-csharp">public class ProjectVM { public int CategoryID { get; set; } }</code>
Bei der Einreichung von Formular enthält DropDownListFor
nur die ausgewählte Ganzzahl -ID, was den Fehler verursacht.
<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewBag.Categories, "ID", "Name"))</code>
Lösung: CategoryID
Die Lösung beinhaltet das Ändern Ihres Modells, um eine Eigenschaft zu enthalten, die die Sammlung wählbarer Elemente enthält:
dann diesein Ihrem Controller bevölkern:
<code class="language-csharp">public class ProjectVM { public int CategoryID { get; set; } public IEnumerable<SelectListItem> CategoryList { get; set; } }</code>
Ihre Ansicht würde dann verwenden: CategoryList
<code class="language-csharp">public class HomeController : Controller { public ActionResult Create() { var model = new ProjectVM(); model.CategoryList = new SelectList(db.Categories, "ID", "Name"); // Assuming db is your database context return View(model); } [HttpPost] public ActionResult Create(ProjectVM model) { if (ModelState.IsValid) { // Save model to database } // Repopulate the CategoryList in case of validation errors model.CategoryList = new SelectList(db.Categories, "ID", "Name"); return View(model); } }</code>
Wichtige Überlegungen:
<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, Model.CategoryList)</code>
Repopulation nach Post:
entscheidet in IhrerCategoryList
Datenquelle: HttpPost
Ersetzen Sie CategoryList
durch Ihre tatsächliche Datenquelle für Kategorien. Stellen Sie sicher, dass die Eigenschaften db.Categories
Starke Typisierung: ID
verwendet Name
wird für eine starke Typisierung und bessere Code -Klarheit im Vergleich zu einem generischen IEnumerable<SelectListItem>
Durch die Implementierung dieser Änderungen geben Sie den IEnumerable
Helfer die erforderliche Erfassung von Elementen an, wodurch der Typ Fehlanpassungsfehler auflöst. Das obige ist der detaillierte Inhalt vonWarum ist meine Dropdown -Liste 'das ViewData -Element mit Schlüssel' xxx 'vom Typ' System '.Int32 ', muss aber vom Typ 'iEnumerable'' sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!