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

    1.  word ladder 题目: Given two words (start and end), and a dictionary, find the length of shortest t ...

  2. java 通过接口在后台管理器中生成数据

    需求:测试人员在后台批量添加数据很麻烦,特别是针对一款商品配置了英语,还需要手动添加法语.俄语.阿拉伯语,很麻烦,但是因为没有项目组配合,做个小工具批量生成数据就只有自己去研究了 第一步:通过抓包工具 ...

  3. POJ - 3109 Inner Vertices

    不存在-1的情况,而且最多一轮就结束了.如果新增加的黑点v0会产生新的黑点v1,那么v0和v1肯定是在一条轴上的,而原来这条轴上已经有黑点了. 离散以后扫描线统计,往线段上插点,然后查询区间上点数. ...

  4. 97: Address family not supported by protocol,nginx服务启动失败

    1.启动nginx服务报错 环境:centos 6.9,yum安装的nginx,启动报错 [root@lnmp ~]# nginx -tnginx: the configuration file /e ...

  5. 重写KVC

    #import "NSObject+WQKVC.h" #import <objc/runtime.h> /** KVC 首先调用的方法顺序: |- setter: se ...

  6. [Pytorch] pytorch笔记 <二>

    pytorch笔记2 用到的关于plt的总结 plt.scatter scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, ...

  7. sql的where条件转换成mongdb筛选条件

    解析字符串 filterModel1 and filterModel2 and (filterModel3 or filterModel4) 1.转换成mongo的筛选条件 /// <summa ...

  8. 二、OC的构造方法和descriprtion方法

    二.构造方法和description方法 1.构造方法的定义 - (id)initWithAge:(int)newAge andNo:(int)newNo; 2.实现构造方法 - (id)initWi ...

  9. mac系统的几种u盘启动制作方式

    先拿一个U盘,格式化好(guid分区表之类的选项弄好) 1.通过终端制作: 1>下载好自己要安装的系统镜像,最新的在App Store上下,以前的可以去pc 苹果等地方下载 2>在终端输入 ...

  10. 大白话讲解BP算法(转载)

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...