我正在使用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/

10-14 01:44