Heim > Backend-Entwicklung > C++ > Warum kann mein MVC-Formular keine Liste von Objekten veröffentlichen, was zu einer Nullliste im Controller führt?

Warum kann mein MVC-Formular keine Liste von Objekten veröffentlichen, was zu einer Nullliste im Controller führt?

Barbara Streisand
Freigeben: 2025-01-21 14:36:10
Original
545 Leute haben es durchsucht

Why is my MVC form failing to post a list of objects, resulting in a null list in the controller?

MVC-Formular kann keine Objektliste übermitteln

In einer MVC-Anwendung stießen Benutzer auf ein Problem: Ein Formular mit einer Liste von Objekten konnte keine Daten an den Controller übermitteln, was dazu führte, dass eine leere Liste übergeben wurde. Das Formular verwendet eine Schleife und eine Teilansicht zum Rendern der Elemente, aber bei der Übermittlung erhält der Controller eine leere Aufzählung.

Problemanalyse

Um zu verstehen, warum die Daten nicht korrekt übermittelt werden, schauen wir uns den bereitgestellten Code an:

Übergeordnete Ansicht:

<code class="language-csharp">@foreach (var planVM in Model)
{
    @Html.Partial("_partialView", planVM)
}</code>
Nach dem Login kopieren

Teilansicht (_partialView):

<code class="language-csharp">@Html.HiddenFor(p => p.PlanID)
@Html.HiddenFor(p => p.CurrentPlan)
@Html.CheckBoxFor(p => p.ShouldCompare)</code>
Nach dem Login kopieren

PlanCompareViewModel-Klasse:

<code class="language-csharp">public class PlansCompareViewModel
{
    public int PlanID { get; set; }
    public Plan CurrentPlan { get; set; }
    public bool ShouldCompare { get; set; }
}</code>
Nach dem Login kopieren

Lösung

Die Hauptursache des Problems liegt in der Art und Weise, wie die Formularelemente benannt werden. Ohne Index kann der Modellordner die Elemente der Liste nicht unterscheiden. Um dies zu beheben, müssen wir dem Namen des Formularelements den richtigen Index zuweisen:

Verbesserte Teilansicht (_partialView):

<code class="language-csharp">@for (int i = 0; i < Model.Count(); i++)
{
    @Html.HiddenFor(p => p[i].PlanID)
    @Html.HiddenFor(p => p[i].CurrentPlan)
    @Html.CheckBoxFor(p => p[i].ShouldCompare)
}</code>
Nach dem Login kopieren

Diese Änderung ermöglicht es dem Modellordner, einzelne Datenelemente den richtigen Listenelementen zuzuordnen.

Verbessern Sie die Formularerstellung mithilfe von Editor-Vorlagen

Um prägnanter und effizienter zu sein, wird empfohlen, die Editor-Vorlage zu verwenden. Ein Teil der Ansicht kann durch den folgenden Inhalt ersetzt werden, indem PlanCompareViewModel.cshtml im EditorTemplates-Ordner erstellt wird:

<code class="language-csharp"><div>
    @Html.HiddenFor(p => p.PlanID)
    @Html.HiddenFor(p => p.CurrentPlan)
    @Html.CheckBoxFor(p => p.ShouldCompare)
</div></code>
Nach dem Login kopieren

Abschließend kann die übergeordnete Ansicht wie folgt vereinfacht werden:

<code class="language-csharp">@Html.EditorForModel()</code>
Nach dem Login kopieren

Die Editorvorlage übernimmt automatisch die Indizierung, um sicherzustellen, dass Formularelemente für die Modellbindung korrekt benannt werden.

Das obige ist der detaillierte Inhalt vonWarum kann mein MVC-Formular keine Liste von Objekten veröffentlichen, was zu einer Nullliste im Controller führt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage