近日,在开发一个组件的过程中,需要通过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

ajax向Asp.NET后端传递数组型数据的更多相关文章

  1. 如何使用jQuery向asp.net Mvc传递复杂json数据

    jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更好的体验! 调用jQuery的ajax方法时 ...

  2. 【前台 ajax】web项目前台传递数组给后台 两种方式

    项目使用maven    springMVC 有需求 将前台的数组   在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true,  ] 如果Post ...

  3. (谷歌浏览器)前端以FormData类形成表单(含文件),通过ajax提交,PHP后端$_POST数组为空

    [错误信息] PHP获取不到前端发来的POST数据 [前端代码] [HTTP请求] [后端报错]

  4. 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇

    调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userName:{fi ...

  5. AJAX如何获取从前台传递过来的数据然后在通过servle传递给后台

    1 用 request.getParameter接收值 <% String id1=request.getParameter("id"); out.print(id1); % ...

  6. ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)

    一.后台如何接收从前台接收的数组: 使用request.getParameterValues(String xxx); <input type="text" name=&qu ...

  7. 前端AJAX传递数组给Springmvc接收处理

    前端传递数组后端(Spring)来接收并处理: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  8. Jquery Ajax向服务端传递数组参数值

    在使用MVC时,向服务器端发送POST请求时有时需要传递数组作为参数值 下面使用例子说明,首先看一下Action [HttpPost] public ActionResult Test(List< ...

  9. 在ASP.NET MVC中以post方式传递数组参数的示例

    最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...

随机推荐

  1. IOS 设置定时器,执行方法

    //设置定时器(1秒后跳到一下题) [self performSelector:@selector(nextQuestion) withObject:nil afterDelay:1.0];

  2. Uva 11997 多路归并

    题目链接:https://uva.onlinejudge.org/external/119/11997.pdf 题意: k*k的矩阵,从每一行中选一个元素加起来,可以得到 kk个和,求前 k 个最小值 ...

  3. 二叉索引树,LA2191,LA5902,LA4329

    利用了二进制,二分的思想的一个很巧妙的数据结构,一个lowbit(x):二进制表示下的最右边的一个1开始对应的数值. 那么如果一个节点的为x左孩子,父亲节点就是 x + lowbit(x),如果是右孩 ...

  4. DP上课覆盖知识点,POJ(1513)

    题目链接:http://poj.org/problem?id=1513 解题报告: 思路: 知识点从第二个开始扫,递推表达式是:minlec[i]=min(minlec[k])+1,并且要保证,tim ...

  5. 测试 jdbc 中连接关闭的时机

    测试 jdbc 中连接关闭的时机 写一段程序,测试 jdbc 连接的关闭情况 /** * 测试 jdbc 连接的关闭情况 */ public static void testOpenCon(){ // ...

  6. base_lr, blobs_lr

    caffe里面,原来以为是不可以随便调整学习率的,现在看来是可以的.base_lr是适用于所有层的学习率,而针对单个层,可以通过增加两个blobs_lr,用来调整该层的学习率,为什么是两个呢,因为一个 ...

  7. matlab vs联调

    vs 和matlab联调,最近真的把我搞挂了要. 首先,怎么进入联调呢.在vs里先设置一下. vs:tools->attach to process,选择matlab,注意此时matlab一定是 ...

  8. 【赛时总结】◇赛时·VII◇ Atcoder ABC-106

    [赛时·VII] ABC-106 一条比赛时莫名其妙发了半个小时呆的菜鸡&咸鱼得到了自己应有的下场……279th. Rating:1103(+) 终于AK,一次通过…… ◇ 简单总结 ABC还 ...

  9. Java连接数据库的一个问题

    问题描述: 利用HTML+servlet+MySQL写一个简单的登录注册案例,抛出了异常No suitable driver found for jdbc 解决方法 将mysql-connector- ...

  10. 网页弹出[Object HTMLDivElement],怎么取值?

    使用innerHTML方法,可以得到文本值