Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does a checkbox also have a hidden tag with it? [duplicate]

Possible Duplicate:
asp.net mvc: why is Html.CheckBox generating an additional hidden input

I'm rendering a checkbox in an asp.net mvc app, and the control is also outputting a hidden field like this:

<input id="blah-64" name="blah-64" value="true" type="checkbox">
<input name="blah-64" value="false" type="hidden">

Problem is, when I post the form, the form key "blah-64 returns "on, off".

Why is this?

like image 386
Blankman Avatar asked Dec 15 '25 10:12

Blankman


1 Answers

If you look at the source code for the Checkbox helper you'll see a comment that explains it. It looks like this:

if (inputType == InputType.CheckBox) { 
    // Render an additional <input type="hidden".../> for checkboxes. This 
    // addresses scenarios where unchecked checkboxes are not sent in the request. 
    // Sending a hidden input makes it possible to know that the checkbox was present 
    // on the page when the request was submitted. 
...

This is because the W3C specification says that, "When a form is submitted, only "on" checkbox controls can become successful." (Successful being their term for the value submitted). The hidden field ensures they are submitted, regardless of whether they are checked or not. If you don't want this behaviour then simplest way is to render the HTML yourself and don't use a helper.

like image 84
Dan Diplo Avatar answered Dec 17 '25 02:12

Dan Diplo