Frage

Ich habe ein ViewModel, das eine Liste enthält.

Die Beispiele, die ich gesehen habe, zeigen:

    .
  1. Zugriff auf die Listenelemente, indem Sie über alle iteratieren:

    for (var i = 0; i < Model.Compliances.Count; i++)  
    {
        <%=Html.HiddenFor(x => x.Compliances[i].ComplianceId) %>  
        <%=Html.TextBoxFor(x => x.Compliances[i].ComplianceName) %>       
    }
    
  2. oder Angabe einer hart codierten Position in der Liste:

    <%=Html.HiddenFor(x => x.Compliances[2].ComplianceId) %>
    <%=Html.TextBoxFor(x => x.Compliances[2].ComplianceName) %>
    
  3. Ich frage mich, ob es einen bestimmten Weg gibt, um einen bestimmten Listenelement an eine Steuerung zu binden, indem sie etwas konkreter wie seine ID, anstelle von welcher Position, an der es passiert, in der Liste zu binden?

    Danke für jede Hilfe dazu!

War es hilfreich?

Lösung

Sie stecken in WebForms Terminologie.

Diese werden als HTML-Helfer bezeichnet, nicht die Kontrollen.Diese Helfer rendern HTML und binden nichts in dem Sinne, an das Sie denken.Sie werden als Helfer genannt, weil sie einfach dazu beitragen, die Daten auf die richtige Weise zu formatieren.

Der Grund, warum die Helfer spezielle Indizes verwenden, wie Sie sehen, da die Formulare auf dem Server zurückgegeben werden, müssen sie auf einem 0-basierten Formular indexiert werden, sodass das Modellbindemittel sie entdecken und das Modell neu erstellen kann.Dies tut dies durch zwei Dinge, Name und Index, nicht durch IDs von Werten oder irgendetwas anderes.

Wenn Sie also eine Liste auf Postback gebunden sein möchten, muss es ein 0-basierter Index sein ... oder es muss einen "Index" -Wert verwenden, wie er im Abschnitt "Nicht-sequentiellen Indizes" dieses Artikels definiert ist:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top