为什么我的隐藏input写入:value =“value”而不是true / false?

我有一个MVC4网站,(作为一个隐藏的forms的一部分):

<input name="somefield" type="hidden" value="@ViewBag.Test"/> 

ViewBag.Test的值是true 。 表单域将发布到表单的input参数中:

 public ActionResult SomeAction(bool somefield = false, ...) 

但是somefield总是false 。 经过调查,我看到源代码有:

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

但是,我知道这用于工作。 发生了什么,我该怎么办?

这种行为在MVC3和MVC4之间改变了。 在MVC3中,如果你有:

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

它会写得很字面:

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

但是,在MVC4中,它遵循“checkbox”等规则,所以如果值是true你会得到:

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

如果是false ,则完全省略:

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

为了解决这个问题,考虑.ToString()

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

然后遵循string规则而不是布尔规则。