我正在使用Html.Checkbox("Visible")
向用户显示复选框。在回发中,FormCollection["Visible"]
的值为“true,false”。为什么?
鉴于:
<td>
<%: Html.CheckBox("Visible") %>
</td>
在 Controller 中:
adslService.Visible = bool.Parse(collection["Visible"]);
最佳答案
这是因为CheckBox
帮助器会生成一个其他隐藏字段,其名称与复选框相同(您可以通过浏览生成的源代码来查看它):
<input checked="checked" id="Visible" name="Visible" type="checkbox" value="true" />
<input name="Visible" type="hidden" value="false" />
因此,当您提交表单时,这两个值都将发送到 Controller 操作。这是直接来自ASP.NET MVC源代码的注释,解释了此附加隐藏字段背后的原因:
if (inputType == InputType.CheckBox) {
// Render an additional <input type="hidden".../> for checkboxes. This
// addresses scenarios where unchecked checkboxes are not sent in the request.
// Sending a hidden input makes it possible to know that the checkbox was present
// on the page when the request was submitted.
...
建议您不要使用
FormCollection
,而建议使用 View 模型作为操作参数或直接使用标量类型,而将解析的麻烦留给默认模型绑定(bind)器:public ActionResult SomeAction(bool visible)
{
...
}
关于c# - 为什么Html.Checkbox (“Visible”)在ASP.NET MVC 2中返回 “true, false”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5936048/