我正在使用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中是否有另一个帮助方法,或者我应该自己编写?
答案 0 :(得分:3)
一种方法是使用GetValues
类的NameValueCollection
方法来获取数组属性的第一个值,如下所示:
bindingContext.HttpContext.Request.Form.GetValues("IsMultiGraph")[0]