我在我的mvc应用程序中使用html.checkbox
,它会生成类似
<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
但无法正确理解。
答案 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")
}
}