In meiner ASP.NET MVC-App rendere ich ein Kontrollkästchen mit dem folgenden Code:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Jetzt sehe ich, dass dies sowohl das Checkbox-Eingabe-Tag als auch ein verstecktes Eingabe-Tag rendert . Das Problem, das ich habe, ist, wenn ich versuche, den Wert mithilfe der FormCollection aus dem Kontrollkästchen abzurufen:
FormValues["ReceiveRSVPNotifications"]
Ich bekomme den Wert "wahr, falsch". Wenn ich mir das gerenderte HTML ansehe, sehe ich Folgendes:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Die FormValues-Auflistung scheint diese beiden Werte zu verbinden, da sie denselben Namen haben.
Irgendwelche Ideen?
quelle
<input>
Tag verwenden.false
. Schauen Sie sich die Antwort von RyanJMcGowan unten an: "Durch das Senden einer versteckten Eingabe können SieIch hatte das gleiche Problem wie Shawn (oben). Dieser Ansatz mag für POST großartig sein, aber für GET ist er wirklich schlecht. Deshalb habe ich eine einfache HTML-Erweiterung implementiert, die nur das versteckte Feld auspeitscht.
Das Problem, das ich jetzt habe, ist, dass ich nicht möchte, dass eine Änderung am MVC-Framework meinen Code beschädigt. Ich muss also sicherstellen, dass ich eine Testabdeckung habe, die diesen neuen Vertrag erklärt.
quelle
Ich verwende diese alternative Methode, um die Kontrollkästchen für GET-Formulare zu rendern:
Es ähnelt der Methode von Chris Kemp , die gut funktioniert, außer dass diese nicht das zugrunde liegende
CheckBoxFor
und verwendetRegex.Replace
. Es basiert auf der Quelle der ursprünglichenHtml.CheckBoxFor
Methode.quelle
Hier ist der Quellcode für das zusätzliche Eingabe-Tag. Microsoft war so freundlich, Kommentare aufzunehmen, die genau darauf eingehen.
quelle
Ich denke, dass die einfachste Lösung darin besteht, das INPUT-Element direkt wie folgt zu rendern:
In der Razor-Syntax ist dies sogar noch einfacher, da das Attribut "geprüft" direkt mit einem "geprüften" Wert gerendert wird, wenn ein "wahrer" serverseitiger Wert angegeben wird.
quelle