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:
twoe sixforam excluídos porque tinham o disabledatributo definido.
three foi enviado duas vezes porque tinha duas entradas válidas com o mesmo nome.
fournão foi enviado porque é um checkboxque não foichecked
sixnão foi enviado, apesar de ser checkedporque o disabledatributo tem uma precedência mais alta.
sevennã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 checkboxentrada com uma hiddenentrada 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 =falseversão porque a vê =truee, se não a vir , =truepode determinar que a caixa de seleção foi renderizada e que o usuário não a verificou - em oposição às SomeBooleanPropertyentradas que não foram renderizadas.