我遇到以下问题:如果我提交包含检查值复选框,通过AJAX API控制器形式的ModelState对象说,这是无效的。
先决条件:
- 的Visual Studio 2012
- ASP.NET MVC 4决赛
- 最新的jQuery和jQuery不显眼验证的东西(1.8.2和1.9.0.1版本)
重现步骤:
- 创造了形式的视图模型,包含布尔字段:
公共类CheckboxViewModel { [显示(名称= “测试复选框”)] 公共BOOL TestCheckbox {获得; 组; } }
- 创建了一个简单的准备视图模型和呈现形式控制器操作:
公众的ActionResult指数() { 返回查看(新CheckboxViewModel()); }
- 创建了形式的视图
@using(Ajax.BeginForm( “后”, “API /值”,NULL,新AjaxOptions {列举HTTPMethod = “POST”},{新的id = “形式”})) { @ Html.ValidationSummary(真) @ Html.LabelFor(型号=> model.TestCheckbox) @ Html.EditorFor(型号=> model.TestCheckbox) @ Html.ValidationMessageFor(型号=> model.TestCheckbox) <INPUT TYPE = “提交” 值= “提交”/> }
- 来检查,如果ModelState中是有效的,并返回状态代码200,否则400创建的Web API的行动:
公共HttpResponseMessage邮政(CheckboxViewModel模型) { 如果(!ModelState.IsValid) 返回新HttpResponseMessage(HttpStatusCode.BadRequest); 返回新HttpResponseMessage(HttpStatusCode.OK); }
我做了一些谷歌上搜索,我知道编辑器复选框提供了额外的隐藏字段,但它似乎是确定并需要对模型绑定。 所以,当我取消复选框,并提交表单一切正常,服务器状态200响应,这要归功于隐藏字段,我想。 然而,当我做选中复选框并提交表单,服务器状态400响应,这意味着ModelState中处于无效状态。 的ModelState在这种情况下,包含空的ErrorMessage和下面的异常信息的错误:
{System.InvalidOperationException: The parameter conversion from type 'System.Collections.Generic.List`1[System.String]' to type 'System.Boolean' failed because no type converter can convert between these types. в System.Web.Http.ValueProviders.ValueProviderResult.ConvertSimpleType(CultureInfo culture, Object value, Type destinationType) в System.Web.Http.ValueProviders.ValueProviderResult.UnwrapPossibleArrayType(CultureInfo culture, Object value, Type destinationType) в System.Web.Http.ValueProviders.ValueProviderResult.ConvertTo(Type type, CultureInfo culture) в System.Web.Http.ValueProviders.ValueProviderResult.ConvertTo(Type type) в System.Web.Http.ModelBinding.Binders.TypeConverterModelBinder.BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)}
我不知道如何正确处理这个问题。 我应该创建自定义的模型绑定? 还是我失去了一些东西? 任何帮助,将不胜感激。 谢谢。
我创建解决方案再现了我的问题。
更新:我已经想通了,形式实际上包含的值TestCheckbox: true
和TestCheckbox:false
,所以我觉得这也许某种影响的粘合剂和它抛出一个异常。 仍然没有选择如何解决此。