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.Test
是true
.表单字段将发布到表单的输入参数:
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)
然后遵循字符串规则而不是布尔规则.
归档时间: |
|
查看次数: |
9844 次 |
最近记录: |