2012-08-16 40 views
9

我将WebAPI合并到我的开发中,并将所有表单提交发布到WebAPI控制器。我注意到复选框没有正确绑定到模型。我有一个表单使用:ASP.Net MVC 4的WebAPI不能正确地绑定复选框?

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

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

有没有这方面的解决方法,或者是否有我失踪的东西?

+0

看到这个职位,解决了清除视图数据。也许这是同样的问题。 http://stackoverflow.com/questions/11993424/asp-net-mvc3-checkboxform-m-go-is-unchecked-even-though-my-model-go-is-t – 2012-08-16 23:00:28

+4

链接SO帖子中的问题是OP不知道如何绑定输入控件的html助手。当使用Html助手进行输入控件时,他们有一个订单,如果模型在错误发回到视图后,助手将始终呈现原始发布的数据,而不是模型可能包含的任何数据。这是故意保留提交失败时的输入。这就是清除模型状态解决问题的原因。但是,这个问题听起来不像在正常控制器中的绑定是正常的,但不是在WebAPI控制器中。 – Nope 2012-08-16 23:51:28

+0

服务器上的Request.Form中的复选框的值是否正确? – 2012-08-17 05:02:06

回答

7

不使用的HTML帮助:

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

试试这个:

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

这有效......但是为什么?!? – 2014-02-10 12:34:31

+0

我有类似的问题,当我检查时,它是 - 值=“真” - 属性的bcos,它被张贴到控制器。如果您删除了value属性,它总是会在控制器操作中显示为false。 – 2015-05-14 08:04:10

0

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

你可以在给你一个问题的函数中添加一个ViewBag.Clear/ViewData.Clear。

干杯, Ĵ

相关问题