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

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?



Solution 1:[1]

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.

Solution 2:[2]

initialized Boolean values bool something =false;

then convert this value into string like,

<input name="somefield" type="hidden" value="@something.ToString()>

                   OR

initialized string something ="false"; < input name="somefield" type="hidden" value="@something" >

then we can read

    public ActionResult Somemethod(bool IsFromDB) => you can get Boolean value here 
    {
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Marc Gravell
Solution 2 Nayansukh Patil