'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 |