Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 957
Marc Gravell Avatar asked Nov 19 '12 13:11

Marc Gravell


1 Answers

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.

like image 138
Marc Gravell Avatar answered Oct 29 '22 13:10

Marc Gravell