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:
twound sixwurden ausgeschlossen, weil sie das disabledAttribut gesetzt hatten.
three wurde zweimal gesendet, da es zwei gültige Eingaben mit demselben Namen hatte.
fourwurde nicht gesendet, weil es ein ist checkbox, das nicht warchecked
sixwurde nicht gesendet, obwohl checkeddas disabledAttribut eine höhere Priorität hat.
sevenEs 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 checkboxEingabe mit einer hiddenEingabe 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 =falseVersion jedoch, da er die =trueVersion 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 SomeBooleanPropertyEingaben, die überhaupt nicht gerendert wurden.