4

可能重复:
ASP.NET MVC:为什么 CheckBoxFor 会呈现额外的输入标记以及如何使用 FormCollection 获取值

我需要创建一个复选框并将模型绑定到该复选框。假设我只是分配 false 作为值而不是模型值。代码如下。

 @Html.CheckBox("abcd",false)

输出:

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

生成的 HTML 的输出如上所示。我确实理解为什么剃刀视图引擎会放置隐藏的复选框。我的问题是,如果该值为 false,那么可见的复选框应该是value="false"(未选中)。

为什么它已经放value="true"(检查)。同样适用于checkboxfor helper。出了什么问题,或者您能解释一下如何实现吗?

4

2 回答 2

3

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

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

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

于 2012-11-16T10:46:19.807 回答
2

复选框没有不同的选中/未选中值,它们只有一个选中值。如果你明白为什么 razor 会输出隐藏字段,那么你就会明白这一点。

想象一下它确实value='false'。当您选中复选框时会发生什么?你会期望值改变吗?(提示:你不应该)。你会有一个选中的复选框value='false'。那有什么意思?然后,在发布时,您将发布false为您的价值,那将是无稽之谈。

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

于 2012-11-16T08:51:23.830 回答