使用razor asp.net mvc时获取正确的复选框值

我正在使用剃刀渲染我的表格。 我遍历表单中的类.control_group并创建我需要发送回控制器的对象。 我的表单有复选框和隐藏的输入值。 我现在面临的问题是这个。 由剃刀呈现的复选框元素有两个输入,一个是隐藏的,另一个是显示的。 当我收集表单数据时,我总是得到最后一个输入值(隐藏的一个,它总是false )我怎样才能获得真正的价值?

在此处输入图像描述

当前数据发送到控制器(一切都是假的):

 {"ajaxData":[{"Id":"1","RoleId":"1","R":"false","W":"false","E":"false","D":"false"},{"Id":"2","RoleId":"2","R":"false","W":"false","E":"false","D":"false"}]} 

收集这样的数据(在SO上发现类似的问题):

 var ajaxData = $('.control_group').map(function (i, group) { var data = {}; $(group).find(':input').each(function () { data[this.name] = this.value; }); return data; }).get(); ajaxData = JSON.stringify({ 'ajaxData': ajaxData }); console.log(ajaxData); 

控制器看起来像这样:

  public void SendData(List ajaxData) { var data = ajaxData; } public class SomeClass { public int Id { get; set; } public int RoleId { get; set; } public bool R { get; set; } public bool W { get; set; } public bool E { get; set; } public bool D { get; set; } } 

这是设计,你可以在这里阅读: asp.net mvc:为什么Html.CheckBox生成一个额外的隐藏输入

我可以建议你在迭代元素时执行以下操作

如果表单有另一个具有相同名称的元素,并且它不是复选框,则跳过它。

这样你就可以收集正确的字段。

我非常肯定您可以使用JQUERY处理此问题,如果没有,请发布JSFIDDLE以便我们为您提供帮助。

Razor语法总是为单选按钮和复选框创建一个隐藏字段。 您可以将:input选择器更改为:input:checkbox以执行任务。

 var ajaxData = $('.control_group').map(function (i, group) { var data = {}; $(group).find(':input:checkbox').each(function () { data[this.name] = this.value; }); return data; }).get(); ajaxData = JSON.stringify({ 'ajaxData': ajaxData }); console.log(ajaxData);