我正在将 WebAPI 合并到我的开发中,并将所有表单提交发布到 WebAPI 控制器。我注意到复选框没有正确绑定到模型。我有一个表格使用:
@Html.CheckBoxFor(m => m.HasVideo)
它产生一个复选框和一个隐藏的表单元素。当我选中复选框(表示“真”值)时,我的 WebAPI Post 中的模型绑定反映了 HasVideo 属性的假。我将整个方法移到了传统的 mvc 控制器上,并且绑定按预期工作。
是否有解决方法,或者我缺少什么?
我正在将 WebAPI 合并到我的开发中,并将所有表单提交发布到 WebAPI 控制器。我注意到复选框没有正确绑定到模型。我有一个表格使用:
@Html.CheckBoxFor(m => m.HasVideo)
它产生一个复选框和一个隐藏的表单元素。当我选中复选框(表示“真”值)时,我的 WebAPI Post 中的模型绑定反映了 HasVideo 属性的假。我将整个方法移到了传统的 mvc 控制器上,并且绑定按预期工作。
是否有解决方法,或者我缺少什么?
不要使用这个 html 助手:
@Html.CheckBoxFor(m => m.HasVideo)
试试这个:
<input id="HasVideo" name="HasVideo" type="checkbox" value="true" @(((Model!=null) && Model.HasVideo) ? "checked=\"checked\"" : "" ) />
我也见过这个。网络上没有太多关于此的内容,并且应该在某处进行更多记录。如果两者都找到,标准控制器会更喜欢 true 而不是 false,但 api 控制器看起来就像他们只使用找到的最后一个值。
此页面包含一些可能支持这一假设的信息:http: //blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
以前见过这个问题,它通常是 ViewData/ViewBag 干扰,这通常是调试的噩梦。
您可以在给您带来问题的函数中添加 ViewBag.Clear/ViewData.Clear。
干杯,J