Behalten Sie den Zustand einer dynamischen Liste von Checkboxen in ASP.NET MVC

Habe ich eine Klasse namens "PropertyFeature", die enthält einfach PropertyFeatureID und Beschreibung. Es ist ein richtiges Modell erstellt durch LINQ to SQL abgebildet, der an eine SQL Server-Datenbank-Tabelle. Ein Beispiel instance/Zeile:

PropertyFeatureID: 2
Description: "Swimming Pool"

Die Anzahl der Zeilen (PropertyFeatures) kann natürlich wachsen und schrumpfen, und so möchte ich dynamisch machen eine Liste von Checkboxen, so dass der Benutzer kann auswählen, einen von Ihnen.
Kann ich das dynamisch machen die Checkboxen leicht genug, mit so etwas wie:

<%foreach (var Feature in (ViewData["Features"] as IEnumerable<MySolution.Models.PropertyFeature>)) { %>
<%=Html.CheckBox("Features", new { @id = Feature.PropertyFeatureID, @value = Feature.PropertyFeatureID })%><label for="Feature<%=Feature.PropertyFeatureID%>"><%=Feature.Description%></label>
<%}%>

Ich geben Sie die ID für jede checkbox und geben Sie die passende Bezeichnung, so dass der Benutzer intuitiv klicken Sie auf die Beschriftung, und setzen Sie die checkbox - das funktioniert Super.

Ich die CheckBox "name" zu "Features", damit alle Checkboxen gerendert mit dem gleichen Namen, und das MVC-Modell-Bindemittel-Pfähle in einer einzigen Sammlung der sogenannten "Features", wenn das Formular veröffentlicht wird. Dieser funktioniert gut.

Sobald das Formular abgeschickt wird, verwende ich die Werte überprüft und diese speichern, so brauche ich das eigentliche integer-Werte, damit ich weiß, welche PropertyFeature ausgewählt ist, nicht nur ein Haufen boolsche Variablen-und Feldnamen. Also idealerweise möchte ich es als array oder eine collection, die ist einfach, mit zu arbeiten.

Bin ich in der Lage zum abrufen der ausgewählten Werte aus der Controller-Methode, wenn die Schaltfläche geklickt, weil ich nach der Angabe der parameter als int[] Funktionen.

Aber das problem ist, dass es nicht den Status beizubehalten. Das ist, wenn ich auf den submit-button und die Seite wird neu geladen (mit dem Formular wieder angezeigt wird), ich will alle dynamischen Kästchen, um Sie behalten Ihren status überprüft (oder auch nicht). Alle anderen Felder, die ich erstellt habe mit Html.DropDownList und Html.TextBox alle pflegen Ihre Staaten erfolgreich ohne Probleme auf der gleichen Seite in der gleichen form.

Ich habe Stunden damit verbracht, das Lesen der anderen threads und Artikel über ähnliche Themen und es gibt eine Menge von sprechen über die Verwendung von ICollection und IDictionary zu bündeln, die Dinge und verfügen über einen Boolean-Wert für jedes Element, so dass Sie pflegen können, den Zustand einer checkbox. Aber ich weiß nicht zu 100% fassen, wie man das in den Kontext meiner eigenen, persönlichen Beispiel. Ich möchte um die Lösung wirklich einfach und Sie nicht haben, um code-Seiten der neuen Klassen, nur um meinen Zustand einer checkbox.

Was ist die sauberste und korrekte Weise, dies zu tun?

  • Das problem ist, dass beim re-rendering der Ansicht, nachdem eine post. Die binder sieht für den gebuchten Wert für die Eingabe mit dem Namen "Features". Denn dies würde ein array, ich Frage mich, ob das nur funktionieren würde für den ersten index? Kannst du testen, wenn die erste checkbox den Status beizubehalten? Wenn das der Fall ist, werden Sie wahrscheinlich haben, zu schauen, ein bisschen mehr beteiligt-Liste verbindlich.
  • Ja richtig. Ich glaube, es funktioniert überhaupt nicht, auch nicht für die erste checkbox. Ich habe gespielt, um ein bisschen mehr mit der Liste binding-Ansatz, und es scheint viel versprechend. Aber immer noch ein wenig verworren und ich habe nicht in der Lage zu sperren, die bisher beste Lösung.
InformationsquelleAutor Aaron | 2010-07-20
Schreibe einen Kommentar