Kontrollkästchen für NULL-booleschen Wert
Mein Modell ist ein boolescher Wert, der muss null sein
public bool? Foo
{
get;
set;
}
so, in meinem Rasiermesser cshtml ich habe
@Html.CheckBoxFor(m => m.Foo)
außer, dass nicht funktioniert. Weder hat casting mit (bool). Wenn ich
@Html.CheckBoxFor(m => m.Foo.Value)
nicht erzeugen eine Fehlermeldung, aber es funktioniert nicht binden zu meinem Modell, wenn geschrieben und foo auf den Wert null gesetzt. Was ist der beste Weg, um Foo auf der Seite und machen es zu binden, um mein Modell für ein post?
InformationsquelleAutor der Frage DMulligan | 2011-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe es auf Arbeit mit
und dann den Boolean-Wert.cshtml in meinem EditorTemplates Ordner und kleben
innen.
InformationsquelleAutor der Antwort DMulligan
Antwort darauf gefunden, die in ähnlichen Frage - Rendering Nullable Bool als CheckBox.
Es ist sehr einfach und funktioniert einfach:
Es ist wie akzeptiert die Antwort von @afinkelstein außer wir brauchen keine speziellen " editor 'Vorlage'
InformationsquelleAutor der Antwort resnyanskiy
Habe ich
bool? IsDisabled { get; set; }
im Modell. Eingefügt, wenn in der Ansicht.InformationsquelleAutor der Antwort VitalyB
Warum? Ist dies nicht sinnvoll. Eine checkbox hat zwei Zustände: markiert/nicht markiert, oder True/False-wenn man so will. Es gibt keinen Dritten Zustand.
Oder warten Sie mit Ihrer domain-Modelle in Ihren Ansichten anstatt Modelle anzeigen? Das ist Ihr problem. So die Lösung für mich ist die Verwendung einer view-Modell, in dem Sie definieren eine einfache boolean-Eigenschaft:
und jetzt haben Sie Ihre controller-action-pass dieser Ansicht Modell zur Ansicht und generieren Sie das richtige Kästchen.
InformationsquelleAutor der Antwort Darin Dimitrov
Erschwert eine primitive mit versteckten Feldern zu klären, ob False oder Null, wird nicht empfohlen.
Checkbox ist nicht, was Sie verwenden sollten-es hat eigentlich nur einer-Zustand: Überprüft. Ansonsten könnte es alles sein.
Wenn Ihre Datenbank-Feld eine null-boolean (
bool?
), die UX soll die Verwendung von 3-Radio-Buttons, wo der erste Knopf steht für Ihren "Überprüft", der zweite button steht "Nicht Aktiviert" und die Dritte Taste stellt die null, was auch immer die Semantik von null bedeutet. Man könnte ein<select><option>
drop-down-Liste zu speichern, real estate, aber der Nutzer muss zweimal klicken und die Auswahlmöglichkeiten sind bei weitem nicht so unmittelbar klar.RadioButtonList, definiert als eine Erweiterung namens RadioButtonForSelectList, baut die radio-buttons, das selektierte/aktivierte Wert, und legt den
<div class="RBxxxx">
so können Sie css verwenden, um Ihre radio-buttons gehen, horizontal (display: inline-block), vertikal oder in einer Tabelle Mode (display: inline-block; width:100px;)In das Modell (ich bin mit string, string für die Wörterbuch-definition als pädagogische Beispiel. Sie können bool?, string)
InformationsquelleAutor der Antwort Jules Bartow
Für mich war die Lösung, um die Ansicht zu ändern-Modell. Betrachten Sie sind auf der Suche nach Rechnungen. Diese Rechnungen bezahlt werden können oder nicht. Also, Eure Suche hat nun drei Möglichkeiten: Bezahlt, Unbezahlt oder "I don ' T Care".
Hatte ich diese ursprünglich als bool? Feld:
Ließ mich stolpern auf diese Frage. I ended up erstellt ein Enum-Typ und ich behandelte dies wie folgt:
Natürlich hatte ich Sie verpackt in Etiketten und hatte text angegeben, ich meine, hier ist eine weitere option zu prüfen.
InformationsquelleAutor der Antwort Paul
Checkbox Ihnen nur 2 Werte (true, false). Nullable boolean hat 3 Werte (true, false, null), so ist es unmöglich, es zu tun mit einer checkbox.
Eine gute Möglichkeit ist die Verwendung eines drop-down statt.
Modell
Controller
Ansicht
InformationsquelleAutor der Antwort Gudradain
Der sauberste Ansatz, den ich tun konnte, ist zu erweitern, die Erweiterungen zur Verfügung
HtmlHelper
noch während die Wiederverwendung von Funktionalität durch das framework.Experimentierte ich mit 'Gestaltung' den Ausdruck erlauben, eine gerade Durchlaufen, um die native
CheckBoxFor<Expression<Func<T, bool>>>
aber ich glaube nicht, dass es möglich ist.InformationsquelleAutor der Antwort Red Taz
Ich hatte ein ähnliches Problem in der Vergangenheit.
Erstellen Sie eine Checkbox, input in HTML, und legen Sie das Attribut name="Foo" Das sollte noch post richtig.
InformationsquelleAutor der Antwort Chris Lucian
Ich würde eigentlich eine Vorlage erstellen für Sie es und verwenden Sie diese Vorlage für eine "EditorFor" ().
Hier ist, wie ich es gemacht habe:
Meine Vorlage, die im Grunde ist eine Teilansicht, die ich die EditorTemplates-Verzeichnis, unter "Freigaben", in "Ansichten" mit Namen (z.B.):
CheckboxTemplate
:Verwenden Sie es wie dieser (in jeder Hinsicht):
@Html."EditorFor" (x => x.MyNullableBooleanCheckboxToBe, "CheckboxTemplate")
Thats all.
Vorlagen sind so mächtig in MVC verwenden Sie.. Sie können eine ganze Seite als Vorlage, die Sie verwenden würden, mit der
@Html.EditorFor()
; vorausgesetzt, Sie übergeben Ihre view-Modell-in den lambda-Ausdruck..InformationsquelleAutor der Antwort t_plusplus
Nur Prüfung für den null-Wert, und geben Sie false zurück, es:
InformationsquelleAutor der Antwort Rodrigo Boratto
Ich auch vor dem gleichen Problem. Ich habe versucht, die folgenden Ansatz, um das Problem zu lösen
weil ich will nicht zu ändern, die DB und wieder generieren die EDMX.
InformationsquelleAutor der Antwort Amit Kumar
Beim EditorTemplate für ein Modell, welches eine nullable bool...
Split-die nullable bool in 2 booleans:
Innerhalb der editor-template:
Nicht postback die ursprüngliche Eigenschaft Foo, denn das wird nun berechnet aus FooIsNull und FooCheckbox.
InformationsquelleAutor der Antwort buffjape
Alle der oben genannten Antworten kam mit seinen eigenen Problemen. Einfachste/sauberste Weg IMO ist das erstellen eines Helfer
MVC5 Razor
App_Code/Helfer.cshtml
Nutzung
In meinem Szenario, eine null-checkbox bedeutet, dass ein Mitarbeiter noch nicht die Frage gestellt, um den client, so dass es verpackt in einer
.checkbox-nullable
so dass Ihr Stil angemessen und helfen, die end-Benutzer erkennen, dass es wedertrue
nochfalse
CSS
InformationsquelleAutor der Antwort zanderwar
Erweiterungsmethoden:
InformationsquelleAutor der Antwort Jim
InformationsquelleAutor der Antwort edrdesigner
Dies ist eine alte Frage, und die vorhandenen Antworten beschreiben die meisten alternativen. Aber es gibt eine einfache option, wenn Sie über bool? in der viewmodel, und Sie kümmern sich nicht um null in deinem UI:
InformationsquelleAutor der Antwort Jeff Dege