Razor 复选框选中的值未按预期设置

Razor 复选框选中的值未按预期设置,razor,asp.net-mvc-4,html-helper,html.checkbox,Razor,Asp.net Mvc 4,Html Helper,Html.checkbox,可能重复: 我需要创建一个复选框并将模型绑定到该复选框。假设不使用模型值,而是将false指定为值。代码如下 @Html.CheckBox("abcd",false) 输出: <input id="abcd" name="abcd" type="checkbox" value="true" /> <input name="abcd" type="hidden" value="false" /> 正在生成的HTML的输出如上图所示。我确实理解为什么razor视图

可能重复:

我需要创建一个复选框并将模型绑定到该复选框。假设不使用模型值,而是将false指定为值。代码如下

 @Html.CheckBox("abcd",false)
输出:

<input id="abcd" name="abcd" type="checkbox" value="true" />
<input name="abcd" type="hidden" value="false" />

正在生成的HTML的输出如上图所示。我确实理解为什么razor视图引擎会设置隐藏复选框。我的问题是,如果该值为false,则可见的复选框应为
value=“false”
(未选中)


为什么将
value=“true”
(选中)。这同样适用于帮助器的复选框。有什么不对,或者您能解释一下如何实现吗?

复选框没有不同的选中/未选中值,它们只有一个选中值。如果您理解razor输出隐藏字段的原因,那么您就理解了这一点

想象一下,它确实有
value='false'
。选中复选框时会发生什么情况?您是否希望值发生变化?(提示:你不应该这样做)。您将有一个带有
value='false'
的复选框。这到底是什么意思?然后,在发布时,您会发布
false
作为您的值,这将是胡说八道


所以。复选框值属性不会更改。如果需要编写使用该值的代码,不要寻找它的值,检查它是否被选中。

您应该考虑通过模型传递值:

@Html.CheckBoxFor(model => model.abcd)

如果需要将其设置为“false”,则可以通过在返回视图之前在控制器中将abcd属性设置为false来实现

因此,如果我需要根据我们传递的真或假来检查和取消检查复选框,例如
@Html.checkbox(“abcd”,false)
我应该怎么做?因为我无法从你的答案中得到我想要的。@Desmond复选框输入“checked”状态与其值是一个单独的属性。请注意,如果选中并取消选中文本框,“值”属性不会更改,但是浏览器会查看复选框是否选中,如果选中,则会发布输入名称/值,如果未选中,则根本不会发布任何内容。因此,为什么会自动创建一个值设置为false的第二个隐藏输入字段,所以如果用户选中该复选框,服务器将收到两个输入的键/值对,true和false,在这种情况下,如果其中一个为false,它将接受true。