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:
two
y six
fueron excluidos porque tenían el disabled
conjunto de atributos.
three
fue enviado dos veces porque tenía dos entradas válidas con el mismo nombre.
four
no fue enviado porque es un checkbox
que no fuechecked
six
no se envió a pesar de ser checked
porque el disabled
atributo tiene mayor prioridad.
seven
no 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 checkbox
entrada con una hidden
entrada 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 =false
versión porque ve la =true
versió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 SomeBooleanProperty
entradas que no se representan en absoluto.