Why is my hidden input writing: value="value" instead of true/false?

asp.net, asp.net-mvc-4

Solution

This behaviour changed between MVC3 and MVC4. In MVC3, if you have:

<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>

it would write very literally:

<input name="somefield" type="hidden" someprop="True"/>

However, in MVC4, it follows the "checkbox" etc rules, so if the value is `true` you get:

<input name="somefield" type="hidden" someprop="someprop"/>

and if it is `false` it is omitted completely:

<input name="somefield" type="hidden"/>

To get around this, consider `.ToString()`:

<input name="somefield" type="hidden"
   someprop="@(SomeBooleanExpression.ToString())"/>

which then follows string rules rather than boolean rules.

Problem

I have an MVC4 site, with (as part of a hidden form): ``` <input name="somefield" type="hidden" value="@ViewBag.Test"/> ``` The value of `ViewBag.Test` is `true`. The form field is posting to an input parameter of the form: ``` public ActionResult SomeAction(bool somefield = false, ...) ``` but `somefield` is always `false`. Upon investigating, I see that the source code has: ``` <input name="somefield" type="hidden" value="value"/> ``` However, I know this used to work. What has happened, and what can I do?

Original source

Related problems