ASP.NET MVC -Formulare Fehler: ViewData -Typ Mismatch
Bei der Übermittlung eines ASP.NET -MVC -Formulars können Sie auf den Fehler "Das SEEDDATA -Element mit dem Schlüssel" CategoryID "vom Typ 'System.Int32' stoßen, aber vom Typ 'iEnumerable' sein muss. Dies geschieht normalerweise, wenn Ihre Controller -Aktion eine Sammlung von SelectListItem
Objekten für eine Dropdown -Liste erwartet, aber stattdessen eine einzige Ganzzahl empfängt.
Grundursache:
Die Diskrepanz ergibt sich aus einem Missverhältnis zwischen dem Ansichtsmodell und den Erwartungen der Controller -Aktion:
CategoryID
Eigenschaft ist eine int
. IEnumerable<SelectListItem>
, um ihre Optionen zu füllen. Dies führt zu einem Null CategoryList
in der Post -Methode, was den Fehler verursacht. Das Framework versucht, den Wert int
in ViewData
zu verwenden, wobei ein IEnumerable
erwartet wird, was zu dem Typ -Missverhältnis führt.
Lösung:
Die Lösung umfasst die Wiederholung der Eigenschaft CategoryList
innerhalb der Postaktion des Controllers. Dies stellt sicher, dass die Dropdown -List -Daten auch nach der Einreichung des Formulars verfügbar sind.
<code class="language-csharp">public ActionResult Create(ProjectVM model) { if (!ModelState.IsValid) { // Repopulate the CategoryList model.CategoryList = new SelectList(db.Categories, "ID", "Name"); return View(model); } // ... save the model and redirect ... }</code>
Verständnis des Mechanismus:
Die DropDownListFor
Helper -Methode ruft die Auswahlliste aus dem ViewData
-Dictionary mit dem Eigenschaftsnamen ab. Wenn die Liste null ist, überprüft sie einen ViewData
-Antrag mit demselben Namen. Finden eines int
, wobei ein IEnumerable
erwartet wird, dass der Fehler.
Dieser Fehler unterstreicht die Bedeutung einer konsistenten Datenmeldung zwischen Ihren Ansichtsmodellen, Ansichten und Controller -Aktionen für nahtlose Formulareinreichungen. Die sorgfältige Beachtung des Datentypmanagements verhindert diese gemeinsamen MVC -Fallstricke.
Das obige ist der detaillierte Inhalt vonWarum wirft mein ASP.NET -MVC -Formular -Einreichung ein 'ViewData -Element -Typ Mismatch: Erwartung' iEnumerable ', aber empfangenes System. Int32' 'Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!