如何在自定义IModelBinder的POST期间将Html.CheckBox()作为boolean?

时间:2008-11-09 08:31:56

标签: asp.net-mvc

我正在使用Html.CheckBox()。生成的HTML是:

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

在服务器上我有一个Action接受表单发布信息并使用自定义IModelBinder将表单结果绑定到我的某个模型。以下是我在IModelBinder中运行的代码片段:

bool isMultiGraph;
if (!bool.TryParse(bindingContext.HttpContext.Request["IsMultiGraph"], out isMultiGraph))
    bindingContext.ModelState.AddModelError("IsMultiGraph", "Invalid boolean for \"IsMultiGraph\""); //this should not ever happen unless someone is programatically posting
result.IsMultiGraph = isMultiGraph;

问题是,如果Html.CheckBox()正在渲染复选框以及隐藏的输入字段,如果我更改文本框的状态,则回发值会加倍(即“true,false”)。

我理解为什么这样做了,我正在寻找在回发期间解析CheckBox当前值的最佳方法(checked = true,unchecked = false)。在MVC中是否有另一个帮助方法,或者我应该自己编写?

1 个答案:

答案 0 :(得分:3)

一种方法是使用GetValues类的NameValueCollection方法来获取数组属性的第一个值,如下所示:

bindingContext.HttpContext.Request.Form.GetValues("IsMultiGraph")[0]