.net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象
原文地址:http://www.cnblogs.com/fannyatg/archive/2012/04/16/2451611.html
------------------------------------------------------------------------------------------------------------------
Asp.net Mvc Controller Json数组接收数组字典 类型 复杂对象
方法一,(最复杂的方法)
扩展ModelBinder 完全自定义一种参数的解析方法。
/// <summary>
/// 模式绑定数组接收器 eg:,接收字符数组:参数标记如 [ModelBinder(typeof(ArrayBind<string>))]string[] arrayValue
/// </summary>
/// <typeparam name="T"></typeparam>
public classArrayBind<T> : IModelBinder
{
private_T GetValue<_T>(ModelBindingContext bindingContext,stringkey)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(key);
bindingContext.ModelState.SetModelValue(key, valueResult);
return(_T)valueResult.ConvertTo(typeof(_T));
}
#regionIModelBinder 成员
public objectBindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Dictionary<int, T> list =newDictionary<int, T>();
string[] allKey = controllerContext.HttpContext.Request.Form.AllKeys;
foreach(stringkeyinallKey)
{
if(!key.StartsWith(bindingContext.ModelName, StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
string[] _key = key.Split('.');
if(_key.Length !=2)
{
continue;
}
intme =0;
if(int.TryParse(_key[1],outme))
{
list.Add(me, GetValue<T>(bindingContext, key));
}
}
var sort = from kinlist orderby k.Key ascending select k;
returnsort.Select<KeyValuePair<int, T>, T>(C => C.Value).ToArray();
}
#endregion
}
然后在Controller的action方法参数中进行标记,如:
[HttpPost]
publicActionResult Edit([Bind(Prefix ="LevelDescription")][ModelBinder(typeof(ArrayBind<string>))]string[] levelOrder)
{
returnJson(1);
}
方法二,url参数解析法
http://www.domain.com/post?levelOrder=1&levelOrder=2&levelOrder=3&levelOrder=4&levelOrder=5
不推荐这种方法,Url长度有限制,当需要通过URL传递的数据量较大时就会出现404错误,很恐怖哦。这个“bug”比较隐蔽
方法三,
接收复杂对象数组,Js异步提交数据,
var _lev = {};
_lev["lev[0].Status"] ="5";//这里必须从零开始 名字必须一样
_lev["lev[1].Status"] ="6";
$.post("Edit", _lev
, function(json) {
if(json =="1") { alert(''成功)}
},"json");
同步提交同理,需要在表单中构造这样的结构
<input type="text"name="lev[0].Status"value="5"/><input type="text"name="lev[1].Status"value="6"/> 这里会按照parameterName[index].PropertyName的规则来解析属性。其中,索引必须是连续的且以0开始的正整数。
action方法,如:
[HttpPost]
publicActionResult Edit(Level[] lev)
{
returnJson(lev);
}
如果在action中欲接收一Dictionary 类型值,则变得更加方便,
$("tr[name = 'LeelArea']").each(function(index) {
_lev["levelOrder1["+ index +"].key"] = index;//这里必须从零开始 名字必须一样
_lev["levelOrder1["+ index +"].value"] = $(this).find("textarea").val();
});
if($(this).valid()) {
$.post("Edit", _lev
, function(json) {
Alert(json);
},"json");
}
这里解析key的方式是寻找parameterName[index].Key这样的结构、解析value的方式是寻找parameterName[index].Value这样的结构。如果key或者value是复杂类型(如上面例子中的Information类型),则parameterName[index].Key或parameterName[index].value将被视为前缀(也可以理解为某个类型)而.PropertyName被视为后缀(即某个属性)。这里的索引也要求必须是以0开始的不间断的正整数。否则断开以后的部分将不会被解析。
action方法,如:
[HttpPost]
publicActionResult Edit(Dictionary<int,string> levelOrder)
{
returnJson(1);
}
转载于:https://www.cnblogs.com/niaowo/p/3962266.html
.net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象相关推荐
- controller接收json数据_这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了
前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...
- controller接收json数据_答疑 | 前后端分离,如何接收json数据?
1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错. 答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具 ...
- @RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验
标题太长有木有?主要是为了把问题描述清楚,免得进错文章. 问题描述 昨天测试的同事测试接口的时候,测试出来一个Date类型校验问题. 要求输入的日期格式是:yyyy-MM-dd HH:mm:ss,Vo ...
- python打开json文件变为字典_Python json读写方式和字典相互转化
在Python中,json指的是符合json语法格式的字符串,可以单行或者多行. 它可以方便的在使用在多种语言中,这里介绍的是在python中的字典(dict)与json字符串相互转化的方式. 1. ...
- 向mvc controller传递json数组
对于这个主题我没有找到最合适的办法,只是找出了个可以暂时规避问题的方法.发到这里非常希望各位大侠,能给小弟些思路解决此问题. 一开始的需求 本想实现这么一个功能 这里的 var titles = [{ ...
- controller接收json数据_SpringMVC实现多种数据类型绑定
点击上方"放学等我",选择"置顶公众号" 精品文章,第一时间送达 绑定基本数据类型 Java基本数据类型int的默认值是0,在使用int进行url传递参数时,参 ...
- Spring Boot笔记-controller接收json参数
以前使用的是这样的方式获取JSON参数的 在controller端参数使用HttpServletRequest HttpServletRequest request 通过他的 request.getI ...
- controller接收json数据_SpringBoot实战(二):SpringMvc接收xml请求
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 最近在对接一个第三方系统,需要接收第三方系统的回调,而且格式为XML形式,之前自己一般 ...
- Vue前后台数据交互实例演示,使用axios传递json字符串、数组
Vue 前后台数据交互实例演示 第一章:后台实现 ① Python 启用 Flask 服务器 ② 后台启用成功验证 第二章:前台实现 ① Vue 使用 Axios 实现接收 json 字符串.数组数据 ...
最新文章
- 致那些还在创业之路上孤独前行的青年大学生们!
- Hive的JDBC连接和数据查询功能
- vue-cli3.0 移动端适配
- ansible安装部署_运维日记|使用ansible批量部署crontab定时删归档任务
- 源码时代php中级项目,PHP学科项目评比圆满结束
- echarts 柱状图颜色_echarts的实战案例一些(二)
- linux的cimserver是什么服务,openpegasus的启动方式(即cimserver的启动方式)
- 2006年 上半年 网络管理员 下午试卷
- 镜像分割与高可用性灾难恢复
- 使用读写锁实现同步数据访问
- 风险投资,扼杀中国互联网创新的黑手
- Java dom序列化字符串,java – 如何在序列化之前从DOM中剥离仅空白的文本节点?...
- 华硕笔记本电脑<举例:华硕玩家国度G752VS>启动时/重装系统后开机会自动进入BIOS界面?
- Java商城系统后端和小程序模板、毕业设计下载
- quartz mysql表文件_quartz 持久化 数据库表
- 怎么将flv格式转换成mp4,四个步骤完成转换
- python的list怎么取后几个元素
- 北京大学医疗科技风论文答辩PPT模板
- (Python)sum函数的用法
- catia如何画花键_CATIA花键绘制万向节的装配及螺纹绘制