Maintenir l'état d'une liste dynamique de cases à cocher dans ASP.NET MVC

J'ai une classe appelée "PropertyFeature" qui contient tout simplement PropertyFeatureID et la Description. C'est un bon modèle créé par LINQ to SQL mappé à une base de données SQL Server le tableau. Un exemple d'instance/ligne serait:

PropertyFeatureID: 2
Description: "Swimming Pool"

Le nombre de lignes (PropertyFeatures) peut bien sûr grandir et rétrécir, et j'ai donc de vouloir rendre une liste de cases à cocher, de sorte que l'utilisateur peut sélectionner l'un d'eux.
J'dynamique peut rendre les Cases assez facilement, avec quelque chose comme:

<%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>
<%}%>

Je spécifiez l'ID pour chaque case, et de rendre l'étiquette correspondante, de sorte que l'utilisateur peut intuitivement cliquez sur l'étiquette et activer /désactiver la case à cocher - qui fonctionne très bien.

J'ai défini la Case "nom" de "Caractéristiques" de sorte que toutes les cases de rendu avec le même nom, et le Modèle MVC Liant les empile dans une collection unique appelé "Caractéristiques" lorsque le formulaire est affiché. Cela fonctionne très bien.

Une fois le formulaire envoyé, j'utilise les valeurs contrôlées et de les stocker, donc j'ai besoin de réelles valeurs entières donc je sais qui PropertyFeature est sélectionné, pas juste un tas de Booléens et les noms de champ. Donc, idéalement, je le veux comme un tableau ou une collection qui est facile à travailler avec.

Je suis en mesure de récupérer les valeurs sélectionnées à partir de l'intérieur de ma méthode de Contrôleur lorsque le bouton est cliqué parce que j'ai spécifié le paramètre de type int[] Caractéristiques.

Mais le problème est qu'il ne maintient pas l'état. C'est, lorsque je clique sur le bouton submit et le rechargement de la page (avec le formulaire de nouveau affiché) je souhaite à tous de la dynamique des cases à cocher pour conserver leur statut vérifié (ou pas). Tous les autres champs que j'ai créé avec Html.DropDownList et Html.TextBox toutes les maintenir leurs etats avec succès pas de problèmes à tous sur la même page dans la même forme.

J'ai passé des heures à lire tous les autres threads et des articles sur des sujets similaires et il y a beaucoup de parler en utilisant ICollection et IDictionary de regrouper les choses et de comprendre une valeur Booléenne pour chaque élément de sorte qu'il peut maintenir la case à cocher état. Mais je ne suis pas 100% saisir comment les utiliser que dans le cadre de mon propre exemple. Je tiens à garder la solution vraiment simple et ne pas avoir à coder des pages de nouvelles classes pour maintenir ma case à cocher état.

Quelle est la plus propre et la bonne façon de le faire?

Le problème est que lors de la ré-rendu de la vue après un post. Le liant de recherche pour le posté valeur de l'entrée nommée "Caractéristiques". Car ce serait un tableau, je me demande si cela ne fonctionne que pour le premier indice? Pouvez-vous tester si la première case à cocher peut maintenir l'état? Si c'est le cas, vous aurez probablement à rechercher dans un peu plus impliqué liste de liaison.
Ouais corriger. En fait, je pense qu'il ne fonctionne pas du tout, même pas pour la première case. J'ai joué un peu plus avec la Liste contraignante et il semble beaucoup plus prometteuse. Mais toujours un peu compliqué et je n'ai pas été en mesure de verrouiller la meilleure solution pour le moment.

OriginalL'auteur Aaron | 2010-07-20