MVC 2 - Passage enum pour CheckBoxFor
Imaginons que nous avons un modèle:
public class Document
{
public string Name { get; set;}
public List<DayOfWeek> WeekDays { get; set; }
}
Est-il possible de rendre les cases qui représentent les jours de la semaine pour ce modèle?
J'ai cherché sur internet mais n'a pas trouvé de solution.
Je veux dire qu'il fonctionne avec CheckBoxFor(model=> model.SomeProperty)
mais il ne fonctionne pas si SomeProperty
est List<DayOfWeek>
. DayOfWeek
voici une énumération.
Merci d'avance.
OriginalL'auteur ilkin | 2010-11-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez énumérer sur les valeurs de l'enum et de créer manuellement les cases à cocher. En utilisant la même
name
pour chaque case à cocher permet de présenter sous forme de tableau dans le ActionMethod.Votre méthode d'action serait quelque chose comme:
OriginalL'auteur bmancini
Cela nécessiterait une modification à votre DayOfWeek enum, mais je préfère le faire comme un drapeau (moins salissant, une seule valeur, etc). Fait intéressant à noter, Microsoft a également utiliser des jours de la semaine dans leur enum drapeaux de la documentation.
DayOfWeek enum à l'aide de bits indicateurs:
Modèle:
Vue:
Contrôleur:
Rapide aide pour ParseToEnumFlag:
De fond:
La raison de l'enum valeurs d'indicateurs sont dans une série géométrique (1,2,4,8...) est de telle sorte que, lorsque les valeurs sont additionnées, il y a une seule combinaison possible. Par exemple, nous savons que
31
ne pourrait être Lun, Mar, Mer, Jeu et Ven (1 + 2 + 4 + 8 + 16).Mise à jour - 3ème septembre 2012
Il semble que j'ai raté le ToIEnumerable() qui est une extension de notre code source. Il prend une chaîne délimitée et il jette dans un IEnumerable est donc parfait pour délimité par des virgules numéros. Grâce à @escist pour le headsup.
source.Get(formKey).ToIEnumerable<int>(',').Sum())
donne une erreur de compilationVeuillez voir ma mise à jour concernant ToIEnumerable.
J'aime cette réponse, mais j'ai un peu de mal à convertir la vue de Rasoir Vue (je suis en train de travailler avec ASP.NET MVC 4). Est-il possible d'écrire le Rasoir d'accéder à la version de ceci ou de donner des liens sur comment je dois le convertir? Merci.
OriginalL'auteur Dan Atkinson
Vous pouviez créer votre propre modèle personnalisé qui sait prendre l'énumération de la liste et de les transformer en des cases à cocher. Ensuite, vous deviez ajuster le modèle de liaison de la poignée de liaison de l'enum basé sur la valeur cochée. Étant donné que votre question manque de détails, je ne suis pas sûr de ce que le cas d'utilisation de ce modèle est.
C'est comment vous pouvez l'inclure dans votre point de vue:
OriginalL'auteur John Farrell
Remarque: j'ai eu un problème de mise en œuvre de Dan réponse à l'aide de
HasFlag()
dans la vue lors de l'utilisation dedayOfWeek
déclaré comme un var. J'ai eu à le déclarer comme leDayOfWeek
Enum.Vue:
J'ai aussi eu et problème avec le
ToIEnumerable
fonction en aide comme il n'existe pas de fonction de même nom (au moins pour moi).OriginalL'auteur Profex
Basé sur Dan Atkinson (grande) réponse, j'avais fait un peu de raccourcis ici et là. Ma suggestion serait:
La même enum avec [Drapeaux] et le modèle.
Pour Vue, je ne voudrais pas changer le type de
int
mais gardez la case à cocher valeursstring
:Qui rend le Contrôleur beaucoup plus simple:
Note, le code ne pas utiliser les extensions.
Acclamations,
OriginalL'auteur Jacek