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:
twoe sixsono stati esclusi perché avevano l' disabledattributo impostato.
three è stato inviato due volte perché aveva due input validi con lo stesso nome.
fournon è stato inviato perché non lo è checkboxstatochecked
sixnon è stato inviato nonostante sia checkedperché l' disabledattributo ha una precedenza più alta.
sevennon 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 checkboxinput con un hiddeninput 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 =falseversione perché vede la =trueversione, e quindi se non la vede =truepuò determinare che la casella di controllo è stata visualizzata e che l'utente non l'ha selezionata, al contrario degli SomeBooleanPropertyinput che non sono stati resi affatto.