【问题标题】:Get correct checkbox value when using razor asp.net mvc使用 razor asp.net mvc 时获取正确的复选框值
【发布时间】:2015-11-24 15:00:48
【问题描述】:

我正在使用 razor 渲染我的表单。我遍历表单内的类.control_group 并创建需要发送回控制器的对象。我的表单有复选框和隐藏的输入值。我现在面临的问题是这个。 razor 渲染的复选框元素有两个输入,一个是隐藏的,另一个是显示的。当我收集表单数据时,我总是得到最后一个输入值(隐藏一个,它总是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<SomeClass> 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; }
    }

【问题讨论】:

  • 什么时候调用描述为“收集数据”的代码?
  • 你有什么理由不只是序列化表单吗? - $.post(url, $('form').serialize(), ....
  • 虽然我刚刚注意到你的观点是错误的(无效的 html)如果这是一个集合。您需要使用for 循环或EditorTemplate 生成表单控件

标签: javascript jquery json ajax asp.net-mvc


【解决方案1】:

这是设计使然,您可以在这里阅读:asp.net mvc: why is Html.CheckBox generating an additional hidden input

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多