Nehmen wir an, wir haben ein Modell:
%Vor%Ist es möglich, Kontrollkästchen zu erstellen, die für dieses Modell Wochentage darstellen? Ich habe das Internet durchsucht, aber keine Lösung gefunden.
Ich meine, es funktioniert mit CheckBoxFor(model=> model.SomeProperty)
, aber es funktioniert nicht, wenn SomeProperty
ist List<DayOfWeek>
. DayOfWeek
ist hier eine Aufzählung.
Vielen Dank im Voraus.
Dies würde eine Änderung Ihrer DayOfWeek-Enumeration erfordern, aber ich bevorzuge es als Flag (weniger chaotisch, nur ein Wert usw.). Interessanterweise verwendet Microsoft auch Wochentage in der Enumflags-Dokumentation .
DayOfWeek-Enumeration mit Bit-Flags:
%Vor%Modell:
%Vor%Anzeigen:
%Vor%Controller:
%Vor%Schnellhilfe für ParseToEnumFlag:
%Vor% Hintergrund:
Der Grund, warum die enum flags Werte in einer geometrischen Reihe sind ( 1,2,4,8 ... ) ist so, dass Wenn die Werte addiert werden, gibt es nur eine mögliche Kombination. Zum Beispiel würden wir wissen, dass 31
nur Mo, Di, Mi, Do und Fr (1 + 2 + 4 + 8 + 16) sein kann.
Update - 3. September 2012
Es scheint, dass ich das ToIEnumerable () verpasst habe, welches eine Erweiterung in unserem Quellcode ist. Es wird eine Zeichenfolge mit Trennzeichen verwendet und in ein IEnumerable umgewandelt, sodass es sich perfekt für durch Kommas getrennte Zahlen eignet. Danke an @escist für das Heads-Up.
%Vor%Sie könnten Ihre eigene benutzerdefinierte Vorlage erstellen, die weiß, wie die Aufzählungsliste genommen und in Kontrollkästchen umgewandelt wird. Dann müssten Sie den Modellbinder so anpassen, dass er die Enumeration basierend auf dem überprüften Wert bindet. Da Ihre Frage keine Details enthält, bin ich mir nicht sicher, was der Anwendungsfall für dieses Modell ist.
So würden Sie es in Ihrer Ansicht einfügen:
%Vor% Hinweis: Ich hatte ein Problem bei der Implementierung von Dan's Antwort mit HasFlag()
in der Ansicht, wenn dayOfWeek
als var deklariert wurde. Ich musste es als DayOfWeek
Enum deklarieren.
Anzeigen:
%Vor% Ich hatte auch und frage mit der ToIEnumerable
-Funktion in Helfer, da es keine Funktion mit diesem Namen (zumindest für mich) gibt.
Basierend auf Dan Atkinsons (großartige) Antwort hatte ich hier und da ein paar Abkürzungen gemacht. Mein Vorschlag wäre:
Dieselbe Aufzählung mit [Flags] und Modell .
Für Ansicht würde ich den Typ nicht in int
ändern, sondern die Kontrollkästchenwerte als string
:
Was den Controller viel einfacher macht:
%Vor%Beachten Sie, dass der Code keine Erweiterungen verwendet.
Prost,
Tags und Links asp.net-mvc c# asp.net asp.net-mvc-2 enums