Fehlerbehebung bei MVC-Modellbindungsproblemen mit Objektlisten
Dieser Artikel befasst sich mit einem häufigen Problem in MVC-Anwendungen: Das Versagen des Modellbinders beim korrekten Auffüllen einer Liste von Objekten aus Formulardaten. Das Symptom ist eine Nullliste in der Controller-Aktion, trotz scheinbar korrekter Formularübermittlung.
Die Grundursache: Fehlende Indizes
Das Kernproblem liegt in der fehlenden Indizierung in Formularelementen. Ohne Indizes kann der Modellordner einzelne Elemente innerhalb der Liste nicht unterscheiden. Stellen Sie sich beispielsweise dieses Szenario vor: Das Formular enthält zunächst Elemente ohne eindeutige Bezeichner.
<code><!-- Incorrect: Missing indices --></code>
Die Lösung: Nutzung von EditorTemplates
Die Lösung besteht darin, EditorTemplates zu verwenden, um automatisch korrekt indizierte Formularelemente zu generieren. Dadurch entfällt die manuelle Indizierung und eine ordnungsgemäße Modellbindung wird sichergestellt.
Implementierungsschritte:
Erstellen Sie einen EditorTemplates-Ordner: Erstellen Sie einen neuen Ordner mit dem Namen „EditorTemplates“ in Ihrem Ansichtenordner. Dieser Ordner sollte sich im selben Verzeichnis wie Ihre anderen Ansichtsdateien befinden.
Erstellen Sie eine stark typisierte Ansicht: Erstellen Sie im EditorTemplates-Ordner eine stark typisierte Ansichtsdatei, deren Name mit Ihrer Modellklasse übereinstimmt (z. B. PlanCompareViewModel.cshtml
).
Teilansichtsinhalt migrieren: Verschieben Sie den HTML-Inhalt aus Ihrer ursprünglichen Teilansicht in diese neu erstellte Editor-Vorlage.
Verwenden Sie EditorForModel()
: Ändern Sie Ihre übergeordnete Ansicht, um die Hilfsmethode EditorForModel()
zu verwenden. Dieser Helfer rendert automatisch die Formularelemente, korrekt indiziert, basierend auf Ihrem Modell.
<code class="language-csharp">@model IEnumerable<plancompareviewmodel> @using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })) { <div> @Html.EditorForModel() </div> }</code>
Durch die Verwendung dieses Ansatzes interpretiert der Modellbinder die Liste der Objekte in Ihrer Controller-Aktion korrekt und füllt sie auf. Der EditorForModel()
-Helfer generiert dynamisch die erforderlichen Indizes für jedes Element und löst so das Bindungsproblem.
Das obige ist der detaillierte Inhalt vonWarum kann mein MVC-Modellbinder keine Liste mit Objekten aus einem Formular füllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!