使用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);