59

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

但是,我知道这曾经有效。发生了什么事,我该怎么办?

4

1 回答 1

78

这种行为在 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())"/>

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

于 2012-11-19T13:55:10.570 回答