@Html.CheckBox("orderNumbers", new { value = 1 })
@Html.CheckBox("orderNumbers", new { value = 2 })
@Html.CheckBox("orderNumbers", new { value = 3 })
@Html.CheckBox("orderNumbers", new { value = 4 })
@Html.CheckBox("orderNumbers", new { value = 5 })

[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { }

[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { }


如果在操作方法中使用第一个签名,则会得到一个空的IEnumerable

如果我使用第二个签名,则确实会收到值,但是对于未选定的值,我也会收到错误的值(因为MVC的模式是用隐藏字段遮盖所有复选框)。

例如我会收到类似orderNumbers = { "1", "2", "false", "4", "false" }的信息

为什么我不能只获取数字列表?

最佳答案

因为这就是所提供的CheckBoxFor助手的工作方式。

您必须自己为复选框生成html。这样就不会生成隐藏的输入,您将仅获得所选的整数值。

09-13 00:48