2012-08-23 3 views
5

Wir wissen, dass in MVC, ein CheckBoxFor ein checkbox mit einem value="true" und hidden mit einem value=false generieren. Beide Eingabesteuerelemente haben denselben Namen.Wie Sie das Kontrollkästchen in einem Formular in JSON-Daten serialisiert

Es ist sehr sinnvoll, da das Formular einen falschen Wert senden kann, wenn das Kontrollkästchen deaktiviert ist. Und das Modellbinder wird die versteckte Eingabe ignorieren, wenn das Kontrollkästchen ein wahr zurückgibt.

Aber jetzt habe ich das Formular senden Ereignis überschrieben, um die Formulardaten in einen WebAPI-Controller im JSON-Format zu senden.

Bei der Serialisierung der Formulardaten gibt es keinen Mechanismus, um die Beziehung zwischen dem Kontrollkästchen und dem ausgeblendeten korrekt zu analysieren. Wenn sie deaktiviert ist, gibt sie daher false zurück, was in Ordnung ist. Aber wenn es überprüft wird, gibt es {true, false} statt true zurück, weil die serializeArray() Funktion jede input durchläuft und zwei Werte findet, die zu einem gleichen Namen gehen.

Die Frage ist: Was ist der beste Weg, um es zu korrigieren?

+0

möglich Duplikat von [ASP.Net MVC 4 WebAPI bindet Kontrollkästchen nicht korrekt?] (Http://stackoverflow.com/questions/11996285/asp-net-mvc-4s-webapi-does-not-bind-) Check-Boxen-richtig) –

Antwort

1

Meine Lösung für dieses Problem bestand darin, meine eigene HtmlHelper-Methode zu schreiben, die einen einzelnen < input type = "checkbox"/>-Tag rendert. Jede andere Lösung schien einfach zu hackig.

Mithilfe von dotPeek oder .NET Reflector können Sie ermitteln, wie das Microsoft-Team die HtmlHelper.CheckboxFor-Methode erstellt hat, wenn Sie Hilfe bei der Durchführung dieser Aufgabe benötigen.

Der 2-Tag-Ansatz wurde verwendet, um zu verhindern, dass MVC-Aktionsparameter eine Ausnahme auslösen, wenn für einen "bool" -Parameter kein passender Parameter an den Controller gesendet wurde (ein nicht abgehaktes Kontrollkästchen sendet keinen Wert).