Rendering Nullable Bool als CheckBox
Ich bin neu von WebForms zu MVC. Ich habe ein view-Modell-Feld mit dem Typ bool?
und standardmäßig EditorFor()
macht dieses Feld als eine DropDownList mit einem "Nicht Festgelegt" - option. Ich würde es vorziehen, um es darzustellen als eine CheckBox, wenn der Wert null ist, wird einfach nicht aktiviert.
Der name des Feldes ist RFP.DatesFlexible
und so schrieb ich das folgende markup in meiner Ansicht:
<input type="checkbox" id="RFP_DatesFlexible" name="RFP.DatesFlexible" />
<label for="RFP_DatesFlexible">My Dates are Flexible</label>
Aber das funktioniert nicht. Das Ergebnis ist immer null und ModelState.IsValid
ist falsch.
Kann mir jemand sagen, wie könnte ich diese Arbeit machen?
BEARBEITEN
Dies ist der code, den ich landete mit, die scheint gut zu funktionieren.
@Html.CheckBox("RFP.DatesFlexible", Model.RFP.DatesFlexible ?? false)
@Html.Label("RFP.DatesFlexible", "My Dates are Flexible")
Das label ist korrekt verbunden mit der checkbox so, dass durch klicken auf den text, schalten Sie die checkbox.
- Vielen Dank für die Antwort!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowas?
Modelle:
Controller:
Anzeigen:
@Html.CheckBox("DatesFlexible", Model.DatesFlexible != null && (bool)Model.DatesFlexible)
. Das funktioniert, habe es gerade getestet. (RFP ist eine Eigenschaft von einem anderen Modell? Modell.RFP.DatesFlexible? Wenn ja, werden Sie wahrscheinlich benötigen, um den Namen des input wie haben Sie es in Ihrer Frage, ich kann mich nicht erinnern, off-hand)null
wenn die Seite abgeschickt wird. Irgendwie, es ist nicht Kommissionierung bis, dass die Steuerung mit dem Feld verbunden. (Das Feld Modell.RFP.DatesFlexible.)bool?
?Erste, ich denke, es würde helfen zu verstehen, wie
Html.CheckBox
funktioniert. Es ist nicht ganz das, was Sie erwarten würde. Werfen Sie einen Blick auf HTML-Code.CheckBox-VerhaltenIhre Frage zu beantworten, der Grund, warum der code nicht funktioniert, ist, weil Ihre
<input />
erfordert einevalue='true'
zu binden, korrekt. Zum Beispiel:Und fügen Sie eine
checked='checked'
Eigenschaft, wenn es überprüft werden soll.Dass ist der Grund, warum ich in der Regel überschreiben die
Html.CheckBox
Methode mit meinen eigenen. Die default-Implementierung ist einfach nur verwirrend.@Html
syntax, wie es bietet einige Vorteile. Und, sicher genug, wenn ich prüfen, das markup, es enthält das Attributvalue='true'
.Ich weiß, es ist markiert als angenommen, aber ich hatte das ähnliche problem, aber ich war der Iteration über sub-Elemente also, ich hatte problem mit dem name-parameter bool? isOpen
Als ich dies Tat, Bindung an das ViewModel auf post, aber machte die dropdown:
Dieser machte die checkbox, sondern Werte, in denen null-Werte in der post:
Durch betrachten des gerenderten html habe ich dies in der Ansicht, in welcher es gelöst:
Ich weiß, es ist weiß, es ist etwas quick n dirty, aber es funktionierte
Hoffe, dies hilft jemand irgendwo.