我有一个MVC4网站,(作为隐藏表格的一部分):
<input name="somefield" type="hidden" value="@ViewBag.Test"/>
ViewBag.Test
的值为true
。表单字段将发布到表单的输入参数:
public ActionResult SomeAction(bool somefield = false, ...)
但somefield
始终为false
。经过调查,我发现源代码有:
<input name="somefield" type="hidden" value="value"/>
然而,我知道这曾经工作过。发生了什么,我该怎么办?
答案 0 :(得分:76)
此行为在MVC3和MVC4之间发生了变化。在MVC3中,如果你有:
<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>
它会非常字面地写出来:
<input name="somefield" type="hidden" someprop="True"/>
但是,在MVC4中,它遵循“复选框”等规则,因此如果值为true
,则得到:
<input name="somefield" type="hidden" someprop="someprop"/>
如果它是false
则完全省略:
<input name="somefield" type="hidden"/>
要解决此问题,请考虑.ToString()
:
<input name="somefield" type="hidden"
someprop="@(SomeBooleanExpression.ToString())"/>
然后遵循字符串规则而不是布尔规则。