In HTML ist jedes <input />
Element einem einzelnen (aber nicht eindeutigen) Name-Wert-Paar zugeordnet. Dieses Paar wird in der nachfolgenden Anforderung (in diesem Fall einem POST-Anforderungshauptteil) nur gesendet, wenn das <input />
"erfolgreich" ist.
Wenn Sie also diese Eingaben in Ihrem <form>
DOM haben:
<input type="text" name="one" value="foo" />
<input type="text" name="two" value="bar" disabled="disabled" />
<input type="text" name="three" value="first" />
<input type="text" name="three" value="second" />
<input type="checkbox" name="four" value="baz" />
<input type="checkbox" name="five" value="baz" checked="checked" />
<input type="checkbox" name="six" value="qux" checked="checked" disabled="disabled" />
<input type="checkbox" name="" value="seven" checked="checked" />
<input type="radio" name="eight" value="corge" />
<input type="radio" name="eight" value="grault" checked="checked" />
<input type="radio" name="eight" value="garply" />
Generiert diese Name + Wert-Paare, die an den Server gesendet werden:
one=foo
three=first
three=second
five=baz
eight=grault
Beachte das:
two
und six
wurden ausgeschlossen, weil sie das disabled
Attribut gesetzt hatten.
three
wurde zweimal gesendet, da es zwei gültige Eingaben mit demselben Namen hatte.
four
wurde nicht gesendet, weil es ein ist checkbox
, das nicht warchecked
six
wurde nicht gesendet, obwohl checked
das disabled
Attribut eine höhere Priorität hat.
seven
Es wurde kein name=""
Attribut gesendet, daher wird es nicht gesendet.
In Bezug auf Ihre Frage: Sie können sehen, dass für ein Kontrollkästchen, das nicht aktiviert ist, das Name + Wert-Paar nicht an den Server gesendet wird. Andere Eingaben mit demselben Namen werden jedoch mit ihm gesendet.
Frameworks wie ASP.NET MVC umgehen dies, indem sie (heimlich) jede checkbox
Eingabe mit einer hidden
Eingabe im gerenderten HTML-Code koppeln, wie folgt:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Rendert:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Wenn der Benutzer das Kontrollkästchen nicht aktiviert, wird Folgendes an den Server gesendet:
SomeBooleanProperty=false
Wenn der Benutzer das Kontrollkästchen aktiviert, werden beide gesendet:
SomeBooleanProperty=true
SomeBooleanProperty=false
Der Server ignoriert die =false
Version jedoch, da er die =true
Version sieht. Wenn er sie nicht sieht =true
, kann er feststellen, dass das Kontrollkästchen gerendert wurde und der Benutzer es nicht aktiviert hat - im Gegensatz zu den SomeBooleanProperty
Eingaben, die überhaupt nicht gerendert wurden.