【发布时间】:2012-08-16 22:21:52
【问题描述】:
我正在将 WebAPI 整合到我的开发中,并将所有表单提交发布到 WebAPI 控制器。我注意到复选框没有正确绑定到模型。我有一个表格使用:
@Html.CheckBoxFor(m => m.HasVideo)
它产生一个复选框和一个隐藏的表单元素。当我选中复选框(表示“真”值)时,我的 WebAPI Post 中的模型绑定反映了 HasVideo 属性的错误。我将整个方法转移到传统的 mvc 控制器上,并且绑定按预期工作。
是否有解决方法,或者我缺少什么?
【问题讨论】:
-
查看这篇文章,解决方案与清除视图数据有关。也许这是同一个问题。 stackoverflow.com/questions/11993424/…
-
链接的 SO 帖子中的问题是 OP 不知道输入控件的 html 助手如何绑定。当为输入控件使用 Html 助手时,它们有一个顺序,如果模型在出现错误后被发送回视图,助手将始终呈现原始发布的数据,而不是模型可能包含的任何数据。这是为了保留提交失败时的输入。这就是为什么清除模型状态可以解决问题。然而,这个问题听起来并不相同,因为绑定在普通控制器中很好,但在 WebAPI 控制器中则不然。
-
服务器上 Request.Form 中复选框的值是否正确?
-
不,不适用于 webapi。我看真假。我有一个解决方法 - 使用旧式 HTML 单选按钮。我真的认为这是 webapi 中的一个错误。
-
@TomSchreck
<input type="checkbox" name="paramName" value="@Model.HasVideo" />然后只需将bool paramName添加到您的操作方法签名中。不需要单选按钮。不要引用我的话,但我很确定如果它被选中,它会传递给你的行动。如果不是,则返回 false 或 null。希望这会有所帮助。
标签: asp.net-mvc asp.net-mvc-3 asp.net-web-api