为什么我的隐藏input写入:value =“value”而不是true / false?
我有一个MVC4网站,(作为一个隐藏的forms的一部分):
<input name="somefield" type="hidden" value="@ViewBag.Test"/>
ViewBag.Test
的值是true
。 表单域将发布到表单的input参数中:
public ActionResult SomeAction(bool somefield = false, ...)
但是somefield
总是false
。 经过调查,我看到源代码有:
<input name="somefield" type="hidden" value="value"/>
但是,我知道这用于工作。 发生了什么,我该怎么办?
这种行为在MVC3和MVC4之间改变了。 在MVC3中,如果你有:
<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>
它会写得很字面:
<input name="somefield" type="hidden" someprop="True"/>
但是,在MVC4中,它遵循“checkbox”等规则,所以如果值是true
你会得到:
<input name="somefield" type="hidden" someprop="someprop"/>
如果是false
,则完全省略:
<input name="somefield" type="hidden"/>
为了解决这个问题,考虑.ToString()
:
<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression.ToString())"/>
然后遵循string规则而不是布尔规则。
- 来自程序集“System.Web.Extensions”的“System.Web.UI.ScriptManager”types中的方法“get_EnableCdn”没有实现
- ASP.NET CLR未启用
- 用于查询string的ASP.Net URLEncode&符号
- .net选错了引用的汇编版本
- OnClick与OnClientClick为asp:CheckBox?
- 将同步代码包装到asynchronous调用中
- 获取应用程序path而不使用httpcontext。 (asp.net)
- 如何debugging:由于堆栈溢出,w3wp.exe进程被终止(在一台机器上工作,但不在另一台机器上)
- 将列表序列化为JSON