In HTML, ogni <input />
elemento è associato a un singolo (ma non unico) nome e coppia di valori. Questa coppia viene inviata nella richiesta successiva (in questo caso, un corpo di richiesta POST) solo se <input />
"ha esito positivo".
Quindi se hai questi input nel tuo <form>
DOM:
<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" />
Genererà queste coppie nome + valore che verranno inviate al server:
one=foo
three=first
three=second
five=baz
eight=grault
Notare che:
two
e six
sono stati esclusi perché avevano l' disabled
attributo impostato.
three
è stato inviato due volte perché aveva due input validi con lo stesso nome.
four
non è stato inviato perché non lo è checkbox
statochecked
six
non è stato inviato nonostante sia checked
perché l' disabled
attributo ha una precedenza più alta.
seven
non ha un name=""
attributo inviato, quindi non viene inviato.
Per quanto riguarda la tua domanda: puoi vedere che una casella non selezionata non avrà quindi il suo nome + coppia valore inviato al server - ma altri input che condividono lo stesso nome verranno inviati con esso.
Frame come ASP.NET MVC aggirano il problema accoppiando (di nascosto) ogni checkbox
input con un hidden
input nell'HTML renderizzato, in questo modo:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Renders:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Se l'utente non seleziona la casella di controllo, verrà inviato al server quanto segue:
SomeBooleanProperty=false
Se l'utente seleziona la casella di controllo, verranno inviati entrambi:
SomeBooleanProperty=true
SomeBooleanProperty=false
Ma il server ignorerà la =false
versione perché vede la =true
versione, e quindi se non la vede =true
può determinare che la casella di controllo è stata visualizzata e che l'utente non l'ha selezionata, al contrario degli SomeBooleanProperty
input che non sono stati resi affatto.