En HTML, cada <input />elemento está asociado con un solo nombre (pero no único) y un par de valores. Este par se envía en la solicitud posterior (en este caso, un cuerpo de solicitud POST) solo si <input />es "exitoso".
Entonces, si tiene estas entradas en su <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" />
Generará estos pares de nombre + valor que se enviarán al servidor:
one=foo
three=first
three=second
five=baz
eight=grault
Darse cuenta de:
twoy sixfueron excluidos porque tenían el disabledconjunto de atributos.
three fue enviado dos veces porque tenía dos entradas válidas con el mismo nombre.
fourno fue enviado porque es un checkboxque no fuechecked
sixno se envió a pesar de ser checkedporque el disabledatributo tiene mayor prioridad.
sevenno tiene un name=""atributo enviado, por lo que no se envía.
Con respecto a su pregunta: puede ver que una casilla de verificación que no está marcada, por lo tanto, no tendrá su par nombre + valor enviado al servidor, pero otras entradas que comparten el mismo nombre se enviarán con él.
Los marcos como ASP.NET MVC evitan esto al emparejar (subrepticiamente) cada checkboxentrada con una hiddenentrada en el HTML representado, de esta manera:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Renders:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Si el usuario no marca la casilla de verificación, se enviará lo siguiente al servidor:
SomeBooleanProperty=false
Si el usuario marca la casilla de verificación, se enviarán ambos:
SomeBooleanProperty=true
SomeBooleanProperty=false
Pero el servidor ignorará la =falseversión porque ve la =trueversión, por lo que si no la ve =true, puede determinar que la casilla de verificación se procesó y que el usuario no la verificó, a diferencia de las SomeBooleanPropertyentradas que no se representan en absoluto.