Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NETMVC4';s WebAPI未正确绑定复选框?_Asp.net Mvc_Asp.net Mvc 3_Asp.net Web Api - Fatal编程技术网

Asp.net mvc ASP.NETMVC4';s WebAPI未正确绑定复选框?

Asp.net mvc ASP.NETMVC4';s WebAPI未正确绑定复选框?,asp.net-mvc,asp.net-mvc-3,asp.net-web-api,Asp.net Mvc,Asp.net Mvc 3,Asp.net Web Api,我正在将WebAPI整合到我的开发中,并将所有提交的表单发布到WebAPI控制器。我注意到复选框没有正确地绑定到模型。我有一个表格,使用: @Html.CheckBoxFor(m => m.HasVideo) 它生成一个复选框和一个隐藏的表单元素。当我选中复选框(表示“true”值)时,我的WebAPI帖子中的模型绑定反映了HasVideo属性的false。我将整个方法移到了传统的mvc控制器上,绑定工作如期进行 是否有解决方法,或者我缺少了什么?以前见过这个问题,它通常会干扰ViewD

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

@Html.CheckBoxFor(m => m.HasVideo)
它生成一个复选框和一个隐藏的表单元素。当我选中复选框(表示“true”值)时,我的WebAPI帖子中的模型绑定反映了HasVideo属性的false。我将整个方法移到了传统的mvc控制器上,绑定工作如期进行


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

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

您可以在出现问题的函数中添加ViewBag.Clear/ViewData.Clear

干杯,
我也看到了这一点。网络上关于这方面的内容并不多,应该在其他地方有更多的文档记录。如果标准控制器同时找到这两个值,那么它会选择true而不是false,但是api控制器看起来只是使用最后找到的值


此页面包含一些可能支持此假设的信息:

不要使用此html帮助程序:

@Html.CheckBoxFor(m => m.HasVideo)
请尝试以下方法:

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


请参阅本文,解决方案与清除视图数据有关。也许这是同一个问题。链接SO帖子中的问题是OP不知道输入控件的html助手是如何绑定的。将Html帮助程序用于输入控件时,它们有一个顺序,如果模型在出现错误后被发送回视图,则帮助程序将始终呈现原始发布的数据,而不是模型可能包含的任何数据。这是为了在提交失败时保留输入。这就是为什么清除模型状态解决了问题。但是,这个问题听起来与绑定在普通控制器中正常,但在WebAPI控制器中不正常不同。服务器上的Request.Form中的复选框值正确吗?不,不适用于WebAPI。我看到了真假。我有一个变通方法——使用老式的HTML单选按钮。我真的认为这是webapi中的一个bug。@TomSchreck
然后只需将
bool paramName
添加到动作方法签名中即可。不需要单选按钮。请不要引用我的话,但我很确定,如果它被选中,它将作为真实信息传递给您的操作。如果不是,则返回false或null。希望这能有所帮助。我也有类似的问题,当我检查时,它是--value=“true”--属性的bcos,它正在被发布到控制器。如果删除value属性,它将在控制器操作中始终显示为false。