Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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/7/image/5.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
C# 检查是否选中复选框MVC控制器_C#_Asp.net Mvc_Checkbox - Fatal编程技术网

C# 检查是否选中复选框MVC控制器

C# 检查是否选中复选框MVC控制器,c#,asp.net-mvc,checkbox,C#,Asp.net Mvc,Checkbox,在我的MVC视图中,我有几个复选框: <form method="POST" id="formRegistration" action="Registration/SubmitRegistration" > //Other code... <input name="test1" type="checkbox" /> <input name="test2" type="checkbox" /> </form> 问题是,即使选中复

在我的MVC视图中,我有几个复选框:

<form method="POST" id="formRegistration" action="Registration/SubmitRegistration" > 
//Other code...
    <input name="test1" type="checkbox" />
    <input name="test2" type="checkbox"  />
</form>
问题是,即使选中复选框,我也会不断得到一个
false


我遗漏了什么?

因此,您应该做的第一件事是查看使用chrome调试工具或类似工具发送到服务器的实际数据。您可能会发现,如果选中,您的复选框值将设置为上的,或者如果取消选中,它将完全丢失

评论中的一个建议是
@Html.CheckBoxFor
,但如果复选框未选中,并且在仍然可能成为问题的特定情况下,则不会发送任何内容,这也会造成问题

您有两种解决方案—在客户端修复,或在服务器上修复

在客户端上修复它
为此,您需要(使用javascript)为每个复选框添加一个隐藏字段。请原谅,我不是由编辑来测试它的,但它可能看起来像这样(从记忆中):

$('input[type=“checkbox”])。每个(函数(el){
隐藏变量=$('');
hidden.name=el.name;
el.之后(隐藏);
el.on(“变更”,功能(el){
hidden.value=el.checked?“真”:“假”;
});
});
在服务器上修复它:
为此,您需要创建一个自定义的
PropertyBinder
,它将
on
识别为布尔值
true
。这将在属性级别上设置。您也可以替代全局
ModelBinder
来执行此操作,这样您就不需要专门为属性添加注释



就我个人而言,我更喜欢“在客户机上解决问题”的方法,因为您每次都会将
true
false
发布回服务器,这是您所期望的,也是最接近
HtmlHelper
的方式。

因此,您应该做的第一件事是查看使用chrome调试工具或类似工具发送到服务器的实际数据。您可能会发现,如果选中,您的复选框值将设置为上的,或者如果取消选中,它将完全丢失

评论中的一个建议是
@Html.CheckBoxFor
,但如果复选框未选中,并且在仍然可能成为问题的特定情况下,则不会发送任何内容,这也会造成问题

您有两种解决方案—在客户端修复,或在服务器上修复

在客户端上修复它
为此,您需要(使用javascript)为每个复选框添加一个隐藏字段。请原谅,我不是由编辑来测试它的,但它可能看起来像这样(从记忆中):

$('input[type=“checkbox”])。每个(函数(el){
隐藏变量=$('');
hidden.name=el.name;
el.之后(隐藏);
el.on(“变更”,功能(el){
hidden.value=el.checked?“真”:“假”;
});
});
在服务器上修复它:
为此,您需要创建一个自定义的
PropertyBinder
,它将
on
识别为布尔值
true
。这将在属性级别上设置。您也可以替代全局
ModelBinder
来执行此操作,这样您就不需要专门为属性添加注释



就个人而言,我更喜欢“在客户机上修复它”的方法,因为每次都会将
true
false
发布回服务器,这是您所期望的,也是最接近
htmlhelp
的方式。

您缺少
属性:

<input name="test1" type="checkbox" value="true" />
<input name="test2" type="checkbox" value="true" />


就这么简单。

您缺少
属性:

<input name="test1" type="checkbox" value="true" />
<input name="test2" type="checkbox" value="true" />


就这么简单。

如果你不想使用HtmlHelper类,你可以这样做

<form method="POST" id="formRegistration" action="Registration/SubmitRegistration" > 

<input name="test1" type="checkbox" value="@Model.test1" />
<input name="test2" type="checkbox" value="@Model.test2"  />


test1和test2应该在模型类中

如果不想使用HtmlHelper类,可以这样做

<form method="POST" id="formRegistration" action="Registration/SubmitRegistration" > 

<input name="test1" type="checkbox" value="@Model.test1" />
<input name="test2" type="checkbox" value="@Model.test2"  />


test1和test2应该在模型类中

使用
Html.CheckBoxFor
而不是使用手动Html。这是使用手动Html的要求,我不能使用Razor。复选框回发控件的值已选中(如果未选中,则不显示)。您的设置
value=“false”
所以它只能提交
false
。如果你不想使用
HtmlHelper
方法,那么就不用麻烦使用mvc,因为你永远不会得到正确的模型绑定。对不起,我忘了删除
value=“false”
这是我的一次测试,你能解释一下你的意思吗:如果你不想使用HtmlHelper方法,那么就不用麻烦使用mvc,因为你永远不会得到正确的模型绑定。对我来说,完全理解你的意思非常重要。谢谢!@StephenMuecke:我一直在ASP.Net中生成手动表单,n不要提及使用javascript等将数据发布到MVC控制器。说唯一可以将数据发布到MVC的是
HtmlHelper
是天真的。使用
Html.CheckBoxFor
而不是使用手动Html。这是使用手动Html的要求,我不能使用Razor。复选框返回其控件的值是选中的(如果未选中,则不显示任何内容。您的设置
value=“false”
,因此它只能提交
false
。如果您不想使用
HtmlHelper
方法,则不要麻烦使用mvc,因为您将永远无法获得正确的模型绑定。抱歉,我忘记删除
value=“false”
这是我的一次测试,你能解释一下你的意思吗:如果你不想使用HtmlHelper方法,那么就不用麻烦使用mvc,因为你永远不会得到正确的模型绑定。对我来说,完全理解你的意思非常重要。谢谢!@StephenMuecke:我一直在ASP.Net中生成手动表单,not提到使用javascript等将帖子发布到MVC控制器中