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

时间:2012-11-19 13:55:11

标签: asp.net asp.net-mvc-4

我有一个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"/>

然而,我知道这曾经工作过。发生了什么,我该怎么办?

1 个答案:

答案 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())"/>

然后遵循字符串规则而不是布尔规则。