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
ajax向Asp.NET后端传递数组型数据的更多相关文章
- 如何使用jQuery向asp.net Mvc传递复杂json数据
jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更好的体验! 调用jQuery的ajax方法时 ...
- 【前台 ajax】web项目前台传递数组给后台 两种方式
项目使用maven springMVC 有需求 将前台的数组 在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true, ] 如果Post ...
- (谷歌浏览器)前端以FormData类形成表单(含文件),通过ajax提交,PHP后端$_POST数组为空
[错误信息] PHP获取不到前端发来的POST数据 [前端代码] [HTTP请求] [后端报错]
- 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userName:{fi ...
- AJAX如何获取从前台传递过来的数据然后在通过servle传递给后台
1 用 request.getParameter接收值 <% String id1=request.getParameter("id"); out.print(id1); % ...
- ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
一.后台如何接收从前台接收的数组: 使用request.getParameterValues(String xxx); <input type="text" name=&qu ...
- 前端AJAX传递数组给Springmvc接收处理
前端传递数组后端(Spring)来接收并处理: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- Jquery Ajax向服务端传递数组参数值
在使用MVC时,向服务器端发送POST请求时有时需要传递数组作为参数值 下面使用例子说明,首先看一下Action [HttpPost] public ActionResult Test(List< ...
- 在ASP.NET MVC中以post方式传递数组参数的示例
最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...
随机推荐
- C++学习之显式类型转换与运行时类型识别RTTI
static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...
- win10启动项添加方法
1.添加或删除启动文件夹下的快捷方式实现开机自启动 我们可以直接将应用软件的快捷方式拖到启动文件夹里,下次开机时便会自动运行这些软件. 不需要开机启动某些软件了就将启动文件夹里的该软件的快捷方式删除掉 ...
- numpy中的inf
numpy中的inf表示一个无限大的正数 import numpy x = numpy.inf x>9999999999999999999 结果为: True
- mycat特点及用途
Mycat关键特性 关键特性 支持SQL92标准 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理. 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera clu ...
- Onboard,迷人的引导页样式制作库
简介 Onboard主要用于引导页制作,源码写的相当规范,值得参考. 项目主页: https://github.com/mamaral/Onboard 实例下载: https://github.com ...
- 在windows7上配置xampp虚拟主机
在设置之前最好关闭xampp1.修改hosts文件进入C:\Windows\System32\drivers\etc目录,找到hosts文件.在# Localhost (DO NOT REMOVE) ...
- FAT32中文版分析+补充(2)
从Offset 36(0x24)开始FAT12/16的内容开始区别于FAT32,现在分两个表格列出来,下表为FAT12/16的内容: 名称 Offset(Byte) 大小(Byte) 描述 BS_dr ...
- mariadb源码编译安装及多实例
准备文件源文件/app/mariadb-10.2.12.tar.gz cd /app/ tar xf mariadb-10.2.12.tar.gz cd mariadb-10.2.12 mkdir ...
- 爬虫学习(十六)——jsonpath
jsonpath介绍 jsonpath是一种信息抽取类库,是从json文档中抽取指定信息的工具,提供多种语言实现的版本 jsonpath对json来说,就相当于xpath对于xml jsonpath和 ...
- ssm整合-错误3
1.警告: Unknown version string [3.1]. Default version will be used. 因为Tomcat版本为7,支持3.1版本的为Tomcat 8: 2. ...