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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With