Em HTML, cada <input />
elemento é associado a um único par de nomes e valores (mas não exclusivo). Este par é enviado na solicitação subseqüente (neste caso, um corpo de solicitação POST) somente se a <input />
"for bem-sucedida".
Portanto, se você tiver essas entradas no seu <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" />
Irá gerar estes pares nome + valor que serão enviados ao servidor:
one=foo
three=first
three=second
five=baz
eight=grault
Notar que:
two
e six
foram excluídos porque tinham o disabled
atributo definido.
three
foi enviado duas vezes porque tinha duas entradas válidas com o mesmo nome.
four
não foi enviado porque é um checkbox
que não foichecked
six
não foi enviado, apesar de ser checked
porque o disabled
atributo tem uma precedência mais alta.
seven
não possui um name=""
atributo enviado, portanto não é enviado.
Com relação à sua pergunta: você pode ver que uma caixa de seleção que não está marcada, portanto, não terá seu par de nome + valor enviado ao servidor - mas outras entradas que compartilham o mesmo nome serão enviadas com ele.
Estruturas como o ASP.NET MVC contornam isso (sub-repticiamente) emparelhando cada checkbox
entrada com uma hidden
entrada no HTML renderizado, da seguinte maneira:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Renderiza:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Se o usuário não marcar a caixa de seleção, o seguinte será enviado ao servidor:
SomeBooleanProperty=false
Se o usuário marcar a caixa de seleção, os dois serão enviados:
SomeBooleanProperty=true
SomeBooleanProperty=false
Mas o servidor ignorará a =false
versão porque a vê =true
e, se não a vir , =true
pode determinar que a caixa de seleção foi renderizada e que o usuário não a verificou - em oposição às SomeBooleanProperty
entradas que não foram renderizadas.