zoukankan      html  css  js  c++  java
  • ajax向Asp.NET后端传递数组型数据

    近日,在开发一个组件的过程中,需要通过Ajax对象向Asp.NET后端传递一个比较复杂的表单,表单中的一个字段是数组类型,我能想到的办法是用JSON.stringify将前端的数组对象序列化成字符串,后端使用Newton.JsonConvert反序列化字符串。
    这样虽然可以解决问题,但是考虑到前端向后端传递数组数据我微软肯定会提供更好的解决方案。服务器端肯定可以接收数组类型的数据,只是目前ajax对象向后端传递的数据格式并不符合要求,通过chrome的控制台观察到前端向后端传递的字节数据格式形如ResourceIds[]=3&ResourceIds[]=10&ResourceIds[]=11&ResourceIds[]=17,但是对于后端对数组数据的格式标准并不清楚,首先想到是用dotpeek反编译.NET代码,但是这样比较浪费时间,而且不知道Asp.NET负责调用Action的程序集是哪个,这个方法想想就算了。直接百度试试能不能解决,结果没有找到适合的答案。翻墙上google轻松找到解决方案,原来Asp.NET后端要求的数据格式形如ResourceIds=3&ResourceIds=10&ResourceIds=11&ResourceIds=17,ajax对象为了适应如PHP和Ruby on Rails框架的传参方式增加了一个设置traditional, traditional指的是ajax序列化参数的方式,默认设置为false,即深度序列化,数据传递的过程中的形如
    ResourceIds[]=3&ResourceIds[]=10&ResourceIds[]=11&ResourceIds[]=17
    深度序列化,以适应如PHP和Ruby on Rails框架;
    传统的传参方式ResourceIds=3&ResourceIds=10&ResourceIds=11&ResourceIds=17
    上Demo
    前端

                var  ResourceIds = [3,10];
                $.ajax({
                    url: url,
                    data: { ResourceIds:ResourceIds },
                    type: "post",
                    traditional: true,
                    success: function(data) {
                        if (data.Code == 20000) {
                            alert("操作成功");
                            window.location.href = window.location.href;
                            return;
                        } else {
                            alert("操作失败请重试");
                        }
                    },
                    error: function () {
                        alert("操作失败请重试");
                    }
                });
    

    后端

        public JsonResult Add(int[] ResourceIds)
        {
            return Json(SourceService.AddRole(ResourceIds, User));
        }
    

    参考资料
    https://my.oschina.net/i33/blog/119506
    http://stackoverflow.com/questions/5489461/pass-array-to-mvc-action-via-ajax

  • 相关阅读:
    冲刺阶段(三)
    冲刺阶段(二)
    第十一周学习进度
    冲刺阶段(一)
    第十一周学习进度条
    第一阶段——站立会议总结DAY04
    第一阶段——站立会议总结DAY03
    第一阶段——站立会议总结DAY02
    第一阶段——站立会议总结DAY01
    第十周学习进度条
  • 原文地址:https://www.cnblogs.com/accessking/p/6664302.html
Copyright © 2011-2022 走看看