【问题标题】:ASP.Net MVC 4's WebAPI does not bind check boxes correctly?ASP.Net MVC 4 的 WebAPI 没有正确绑定复选框?
【发布时间】: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


【解决方案1】:

不要使用这个 html 助手:

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

试试这个:

<input id="HasVideo" name="HasVideo" type="checkbox" value="true" @(((Model!=null) && Model.HasVideo) ? "checked=\"checked\"" : "" ) />

【讨论】:

  • 我遇到了类似的问题,当我检查时,它是 --value="true" -- 属性的 bcos,它被发布到控制器。如果您删除 value 属性,它将在控制器操作中始终显示为 false。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    干杯, J

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多