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

    1107 Social Clusters (30 分) When register on a social network, you are always asked to specify your ...

  2. Python开发第五篇

    面向对象程序设计 面向过程编程:就是分析问题的解决步骤,按部就班的编写代码解决问题 函数式编程:就是把代码封装到函数中,然后在使用时调用封装好的函数 面向对象编程:把一类事物所共有的属性和行为提取出来 ...

  3. IOS SQLite函数总结

    SQL语句的种类 ●  数据定义语句(DDL:Data Definition Language) ●  包括create和drop等操作 ●  在数据库中创建新表或删除表(create table或 ...

  4. Xcode SDK模拟器安装及安装路径

    将SDK想要装的版本,将SDK包放入‘mac中的SDK安装路径’.再将Xcode模拟器重启. 再打开Xcode模拟器,就可以在菜单栏的 ‘硬件’->’设备‘->’iPhone Retina ...

  5. NutDao配置多数据源

    首先,我必须声明,这是一个非常简单的方法,很多小菜没做出来,是因为把nutz想得太复杂 数据源(或者是数据库连接池),在Nutz.Ioc看来,是一个普通的Bean,没任何特别之处. 再强调一点,除了$ ...

  6. C++11 新特性之 decltypekeyword

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lr982330245/article/details/30728131 decltypekeywor ...

  7. Nodejs事件监听模块

    nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露 ...

  8. 2017.9.29 web网上答题及其自动评测系统

    1. 设计计一个网上答题及其自动评测系统,首先是试题页面的设计及其解答的提交, 其次是当提交解答之后,系统自动评阅并给出结果. 分析:需要两个jsp页面:一个是提交信息的页面,另一个是获取提交信息的页 ...

  9. svn: 处于冲突状态

    svn: 提交失败(细节如下):svn: 提交终止: “/home/usa/svn/aispeech/air201102/branches/opt-vite/wvite” 处于冲突状态 删除文件夹wv ...

  10. mysql随机字符串函数

    drop function if exists rand_str; delimiter $$ ) charset 'utf8' begin # 定义接收初始化类型 ) ; # 定义初始化数字 ) '; ...