C# 检查是否选中复选框MVC控制器
在我的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> 问题是,即使选中复
<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控制器中