9

我正在将 WebAPI 合并到我的开发中,并将所有表单提交发布到 WebAPI 控制器。我注意到复选框没有正确绑定到模型。我有一个表格使用:

@Html.CheckBoxFor(m => m.HasVideo)

它产生一个复选框和一个隐藏的表单元素。当我选中复选框(表示“真”值)时,我的 WebAPI Post 中的模型绑定反映了 HasVideo 属性的假。我将整个方法移到了传统的 mvc 控制器上,并且绑定按预期工作。

是否有解决方法,或者我缺少什么?

4

3 回答 3

7

不要使用这个 html 助手:

@Html.CheckBoxFor(m => m.HasVideo)

试试这个:

<input id="HasVideo" name="HasVideo" type="checkbox" value="true" @(((Model!=null) && Model.HasVideo) ? "checked=\"checked\"" : "" ) />
于 2013-07-17T11:07:56.627 回答
1

我也见过这个。网络上没有太多关于此的内容,并且应该在某处进行更多记录。如果两者都找到,标准控制器会更喜欢 true 而不是 false,但 api 控制器看起来就像他们只使用找到的最后一个值。

此页面包含一些可能支持这一假设的信息:http: //blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

于 2013-07-17T11:01:19.880 回答
0

以前见过这个问题,它通常是 ViewData/ViewBag 干扰,这通常是调试的噩梦。

您可以在给您带来问题的函数中添加 ViewBag.Clear/ViewData.Clear。

干杯,J

于 2013-02-03T17:30:03.197 回答