MVC html.checkbox向控制器发布两个值

时间:2015-12-19 12:20:42

标签: html asp.net-mvc checkbox

我在我的mvc应用程序中使用html.checkbox,它会生成类似

的html
<input checked="checked" id="cb17" name="reports" type="checkbox" value="sdf" />
<input name="reports" type="hidden" value="false" /> 

    <input checked="checked" id="cb18" name="reports" type="checkbox" value="ty" />
<input name="reports" type="hidden" value="false" />

表单发布后,它会通过模型绑定概念将html.checkbox的所有值发送到mvc操作。

reports[0]-"sdf"
reports[1]-"false"
reports[2]="ty"
reports[3]="false" 

模型:

 public IEnumerable<string> reports{ get; set; }

我知道 html.checkbox将在内部创建隐藏字段,但是当我发布表单时,它需要发送一个复选框值。为什么它也发送隐藏的字段。如何避免这种情况。

参考以下链接

asp.net mvc: why is Html.CheckBox generating an additional hidden input

但无法正确理解。

1 个答案:

答案 0 :(得分:1)

如果您有该选项,则可以使用CheckBoxFor(x =&gt; x)帮助程序。我正在创建一个自生成的表单,我需要一个没有硬编码的模型来构建表单。

因此,为了解决这个问题,我查看了结果,如果复选框被提交,则会返回两个值(true / false),就像你说的那样。如果未选中复选框,则仅提交false,即隐藏值。

还有其他人建议使用javascript,但如果javascript被禁用怎么办?所以我决定在收到表单集的控制器中使用它。

public ActionResult methodName (FormCollection collecitonName)
        {
            foreach (var key in collecitonName.AllKeys)
            {
                var isCheckboxTrue = Request.Form[key].Contains("true")
            }
         }