asp.net MVC复选框头痛!

Vik*_*kas 9 checkbox asp.net-mvc

我见过很多与这个话题有关的问题.

我正在使用asp.net MVC 1.0

问题领域

如果我使用

<%= Html.CheckBox("Status", true) %>
Run Code Online (Sandbox Code Playgroud)

然后为什么它呈现像

<input checked="checked" id="Status" name="Status" type="checkbox" value="true" /><input name="Status" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)

我把它放在foreach循环中,我有5行.

当我提交真实,真实,真实,虚假,虚假的形式时, 我得到true,false,true,false,true,false,false,false

即对于false => false.

for true => true,false

如果我使用

<input type="checkbox" value="true" name="Status" checked="checked" />
Run Code Online (Sandbox Code Playgroud)

然后,我不会不受控制.

那么我该如何克服这个问题呢?

请不要在formcollection对象中使用循环发布答案并检查每个键!

zih*_*tki 0

之所以如此呈现,是因为默认绑定器要求 FormCollection 具有不可为空参数的值。使用这种技术,我们可以确保即使未选中该复选框,该值也会被发送(默认情况下,仅在选中该复选框时才发送该值)。如果您使用此控制器方法仅使用一个 html 输入,您将在未选中复选框的表单发布中收到错误(复选框的值将不会被发布,并且活页夹将不知道 isItemSelected 的值使用什么):

public ActionResult SomeActionMethod(bool isItemSelected)
Run Code Online (Sandbox Code Playgroud)

您可以尝试仅使用一个 html 输入来使用类似的内容:

public ActionResult SomeActionMethod(bool? isItemSelected)
Run Code Online (Sandbox Code Playgroud)

但在这种情况下 isItemSelected 将为 null 或为 true。而且它永远不会变得虚假。