Ich habe viele Fragen zu diesem Thema gesehen.
Ich benutze asp.net MVC 1.0
Problembereich
Wenn ich
verwende %Vor%Dann warum es wie
rendert %Vor%Ich lege das in foreach loop und ich habe 5 Zeilen.
wenn ich ein Formular mit true, true, true, false, false absende
dann bekomme ich true,false,true,false,true,false,false,false
d. für falsch = & gt; falsch.
für wahr = & gt; wahr, falsch
Wenn ich
verwende %Vor%Dann werde ich nicht unkontrolliert eins.
Wie überwinde ich dieses Problem?
Bitte posten Sie keine Antwort, indem Sie loop im formcollection-Objekt verwenden und jeden Schlüssel prüfen!
Wenn Sie in Ihrem Beispiel ein Formular mit true, true, true, false, false senden, erhalten Sie ein
true,false,true,false,true,false,false,falseEs ist interessant zu bemerken, dass Sie nicht wirklich acht Werte zurückbekommen, aber fünf Arrays, die nur so aussehen, sind der Fall, weil alle Werte verbunden sind Ich weiß, dass Sie gebeten haben, keine Schleife für Ihre Antwort zu bekommen, aber ich kann eine verwenden, um zu demonstrieren, was hier wirklich passiert: %Vor%
Also erhalten Sie für Ihre aktivierten Kästchen ein Werte-Array mit zwei Elementen und für nicht markierte Kästchen erhalten Sie nur ein Array mit einem einzelnen Element.
Um also Ihre Frage zu beantworten, wie lösen Sie dieses Problem , liegt die Antwort darin, GetValues statt GetValue zu verwenden und Ihre geposteten Felder als Arrays und nicht als Strings zu betrachten.
Viel Glück!
Persönlich denke ich, dass ich überall auf dem Server nach "richtig, falsch" suchen muss, ist ein Schmerz. Ich habe einen jquery-Fix geschrieben, der das zusätzliche versteckte Feld entfernt, das vom Html.Checkbox-Helfer erstellt wurde, wenn ein Kontrollkästchen aktiviert ist, und dann das Feld zurückfügt, wenn das Kontrollkästchen deaktiviert ist. Serverwerte sind immer "wahr" oder "falsch". Checkbox-Listen sind etwas subjektiv, wie Sie wollen, dass sie agieren, was ich diskutiere, aber ich entferne "falsch" von der Wertemenge, was bedeutet, dass der Formwert ausgeschlossen wird, wenn alle Kästchen in der Liste deaktiviert sind.
Mit dieser Technik hatte ich ziemlich guten Erfolg. Bitte lassen Sie mich wissen, wenn Sie es ausprobieren und Probleme haben.
Sie müssen eine eigene Modellbindung für die CheckBox-Werte durchführen.
Holen Sie sich die Liste der Werte aus FormCollection oder Request.Form für diese CheckBox-ID und ersetzen Sie true, false durch true:
%Vor%Jetzt haben Sie eine Liste, ob eine CheckBox ausgewählt wurde oder nicht .... machen Sie den Rest selbst:)
Es wird so gerendert, weil der Standardbinder die FormCollection benötigt, um einen Wert für nicht nullbare Parameter zu haben. Mit dieser Technik sind wir sicher, dass der Wert gesendet wird, auch wenn das Kontrollkästchen nicht aktiviert ist (standardmäßig wird der Wert nur gesendet, wenn er aktiviert ist). Wenn Sie diese Controller-Methode mit nur einer HTML-Eingabe verwenden, erhalten Sie einen Fehler beim Formular-Post mit nicht abgehaktem Kontrollkästchen (der Wert des Kontrollkästchens wird nicht angezeigt und der Ordner weiß nicht, was er für den Wert von isItemSelected verwenden soll):
%Vor%Sie können versuchen, so etwas mit nur einer HTML-Eingabe zu verwenden:
%Vor%Aber in diesem Fall ist isItemSelected gleich Null oder wird wahr sein. Und es wird niemals falsch werden.
Nun, es gibt einige Möglichkeiten, die Sie basierend auf Ihren Anforderungen tun können.
Ich benutze diese Methode.
%Vor%Dies sind möglicherweise Kontrollkästchen.
Auf der Serverseite werde ich auch ein Array von IDs des Elements im Modell haben. Also überprüfe ich, ob es in Array
ist %Vor%Verschiedene Leute haben verschiedene Tests.
Dies sollte nur für einfache CheckBox verwendet werden, was Sie wollen, ist checkboxList, die noch nicht in der API von ASP.net MVC enthalten ist
Wenn Sie nach etwas wie Checkbox-Liste suchen, sollten Sie vielleicht Ihren eigenen Helfer schreiben, damit Sie HTML gut verstehen.
Das ist es! :)
Um den Wert eines Kontrollkästchens zu erhalten, ist es wahr oder falsch
%Vor%Tags und Links asp.net-mvc checkbox