25 Stimmen

ASP.NET MVC - Array kann nicht an ViewModel gebunden werden

Ich habe ein View-Modell mit einem Formular, das eine Reihe von Kontrollkästchen enthält. Ich benötige, dass die Kontrollkästchen beim Binden in der Post-Back-Methode meines Controllers auf ein Array abgebildet werden.

Hier ist das View-Modell.

@model TMDM.Models.TestSeriesCreateViewModel

@{
    ViewBag.Title = "Create";
}

Eine Testreihe erstellen

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

            @Html.LabelFor(model => model.Title)

            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)

        Welche Testkollektionen sind in dieser Testreihe?

        @{
            var i = 0;
            foreach (var testCollection in Model.TestCollections)
            {

                @testCollection.Title

                i++;
            }
         }

            @Html.ActionLink("Abbrechen", "Index", "TestSeries", null, new { @class = "medium black awesome" })

Das Formular wird einwandfrei gerendert, ich habe die Quelle überprüft und jedes Ausgabekontrollkästchen hat eine unterschiedliche Nummer für ihre ID- und Name- Felder.

//usw...

Hier ist das View-Modell.

public class TestSeriesModel
{
    public int Id { get; set; }
    public string Title { get; set; }
}

public class TestSeriesCreateViewModel : TestSeriesModel
{
    public List TestCollections { get; set; }
    public int[] ChosenTestCollectionIds { get; set; }
}

Das Problem, das ich habe, ist, dass beim Post-Back des Formulars das ChosenTestCollectionIds-Array null zurückkommt. Was mache ich hier falsch?

ANTWORT

Ich habe herausgefunden, wie es geht:

8voto

Khalid Abuhakmeh Punkte 10541

Ich komme immer wieder auf Phil Haacks Beitrag zum Modellbindung einer Liste zurück. Außerdem definiere ich immer meinen eigenen Index, weil meine Benutzer die Liste auf der Client-Seite ändern und dann die Änderungen zurücksenden werden.

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

0voto

Ryand.Johnson Punkte 1886

Legen Sie den Namen der Eingabetypen alle auf dieselbe Weise fest. Sie können auch einen benutzerdefinierten Modellbinder erstellen, wenn Sie versuchen, ein komplexeres Modell zu binden als nur eine Liste. Hier ist ein ausgezeichneter Artikel über die verschiedenen Möglichkeiten, um Ihre Modelle zu binden

Verschiedene Techniken zum Binden von Modellen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X