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

Mar*_*ell 57 asp.net asp.net-mvc-4

我有一个MVC4站点,(作为隐藏表单的一部分):

<input name="somefield" type="hidden" value="@ViewBag.Test"/>
Run Code Online (Sandbox Code Playgroud)

价值ViewBag.Testtrue.表单字段将发布到表单的输入参数:

public ActionResult SomeAction(bool somefield = false, ...)
Run Code Online (Sandbox Code Playgroud)

somefield总是如此false.经过调查,我发现源代码有:

<input name="somefield" type="hidden" value="value"/>
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 76

这种行为在MVC3和MVC4之间发生了变化.在MVC3中,如果你有:

<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>
Run Code Online (Sandbox Code Playgroud)

它会非常字面地写:

<input name="somefield" type="hidden" someprop="True"/>
Run Code Online (Sandbox Code Playgroud)

但是,在MVC4中,它遵循"复选框"等规则,因此如果值为true:

<input name="somefield" type="hidden" someprop="someprop"/>
Run Code Online (Sandbox Code Playgroud)

如果是false,则完全省略:

<input name="somefield" type="hidden"/>
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,请考虑.ToString():

<input name="somefield" type="hidden"
   someprop="@(SomeBooleanExpression.ToString())"/>
Run Code Online (Sandbox Code Playgroud)

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