应用场景:在前端用ajax向服务器提交json对象数组,在controller的以对象数组作为函数的参数,提交的json数组直接转为服务器端的对象数组。

如:

要将json对象数组[{Id:1,Name:"AA"},{Id:2,Name:"BB"}]  用ajax提交,

Controller代码:

 public EmptyResult Save(Models.User[] users)
{
return new EmptyResult();
}

方法一:

在前端将json对象用以下方式提交

var url = "http://localhost:8848/User/Save";
var data = {};
data["users[0].Id"] = ;
data["users[0].Name"] = "AA";
data["users[1].Id"] = ;
data["users[1].Name"] = "BB";
$.post(url, data, function () {
alert("提交成功");
});

方法二:

在服务器端自定义ValueProvider

public class JsonArrayValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
var formValues = controllerContext.HttpContext.Request.Form; var values = new Dictionary<string, object>();
Regex regex = new Regex(@"\[[A-Za-z]*\]");
for (int i = ; i < formValues.Count; i++)
{
string key = formValues.Keys[i];
var matchs = regex.Matches(key);
if (matchs.Count > )
{
foreach (Match match in matchs)
{
if (match.Value != "[]")
key = key.Replace(match.Value, "." + match.Value.Trim('[', ']'));
}
if (key.EndsWith("[]"))
values.Add(key.Replace("[]", ""), formValues.GetValues(i));
else
values.Add(key, formValues[i]);
}
} return new DictionaryValueProvider<object>(values, System.Globalization.CultureInfo.InvariantCulture);
}
}

添加自定义的ValueProvider,可以再Application_Start执行
ValueProviderFactories.Factories.Add(new JsonArrayValueProviderFactory());

前端:

var url = "http://localhost:8848/User/Save";
var data = { users: [{ Id: 1, Name: "AA" }, { Id: 2, Name: "BB"}] };
$.post(url, data, function () {
alert("提交成功");
});

MVC中用ajax提交json对象数组的更多相关文章

  1. Spring mvc 下Ajax获取JSON对象问题 406错误

    我在学习springmvc过程中(我的项目是配置的后缀是.html),从controller返回对象. 如果我不使用 mvc-annotation-driver,而是手动配置,AnnotationMe ...

  2. Spring mvc下Ajax获取JSON对象问题 406错误

    spring 通过@ResponseBody标签返回JSON数据的方法都报406错: Failed to load resource: the server responded with a stat ...

  3. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

  4. spring MVC 如何接收前台传入的JSON对象数组并处理

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  5. spring MVC 如何接收前台传入的JSON对象数组

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  6. 在Asp.Net MVC中用Ajax回调后台方法

    在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...

  7. ajax获取json对象

    ajax获取json对象 ajax获取json数据,都是一个原理,设置response 的Content-Type:application/json,这样浏览器自动会解析为json对象 $result ...

  8. list对象数组,xpath复杂定位校验,POST入参为number数组,POST入参为JSON对象数组

    list对象数组: POST入参为number数组: {    "typeIds":[1,2,3]} POST入参为JSON对象数组,举例: [{    "itemId& ...

  9. 将Json对象数组转化成JS Array数组

    private format(cards:any):Array<any>{ var result = new Array(); cards.forEach(element => { ...

随机推荐

  1. HDU 4292 Food

    Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事

    原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...

  3. Rman-03002,Rman-12010,Rman-12012

    为什么会出现如此的错误呢? 答:因为我们在分配通道时设备类型分配为磁带,但是你并没有安装磁带设备,所以就会出现这样的错误. 错误如下: 解决方法: 登陆你的目标数据库,重新进行设置,命令如下: con ...

  4. python写入中文到文件乱码的问题

    file = open(filename,'a',encoding='utf8')#指定写入编码为utf8,否则写入中文会乱码

  5. 读书笔记--编程珠玑II

    学化学的应该都知道chemdraw,这是一款专门绘制化学结构的软件,什么苯环.双键各种word难以搞定的分子式,你可以轻松的用chemdraw完成,可以称得上化学工作者居家旅行必备的良药.其实早在19 ...

  6. 【翻译习作】 Windows Workflow Foundation程序开发-第一章02

    1.2      Windows Workflow概览 微软的Windows Workflow Foundation(简称WF)是.NET框架3.0版的一部分..NET3.0其它主要部分是Window ...

  7. PAT1007

    #include<stdio.h>#include<vector>#include<algorithm>using namespace std; int main( ...

  8. ajax 清除缓存

    $.ajax({ url : actionUrl , beforeSend :function(xmlHttp){  // deforeSend 是请求前清除缓存  ,如果没有缓存也不使用before ...

  9. [微信开发利器]微信内移动前端开发抓包调试工具fiddler使用教程

    [微信开发利器]微信内移动前端开发抓包调试工具fiddler使用教程   在朋友圈看到一款疯转的H5小游戏,想要copy,什么?只能在微信里打开?小样,图样图森破,限制了oauth.微信浏览器内打开, ...

  10. SQL Server 修复数据库 相关 脚本 之 DBCC CHECKDB 用法 来自同事分享

    DBCC CHECKDB 用法详解, 手工修复数据库 1. 快速修复 DBCC CHECKDB ('数据库名',REPAIR_FAST) 2.重建索引并修复 DBCC CHECKDB ('数据库名', ...