原文地址: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方式 数组 字典 类型 复杂对象相关推荐

  1. controller接收json数据_这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了

    前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...

  2. controller接收json数据_答疑 | 前后端分离,如何接收json数据?

    1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错. 答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具 ...

  3. @RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验

    标题太长有木有?主要是为了把问题描述清楚,免得进错文章. 问题描述 昨天测试的同事测试接口的时候,测试出来一个Date类型校验问题. 要求输入的日期格式是:yyyy-MM-dd HH:mm:ss,Vo ...

  4. python打开json文件变为字典_Python json读写方式和字典相互转化

    在Python中,json指的是符合json语法格式的字符串,可以单行或者多行. 它可以方便的在使用在多种语言中,这里介绍的是在python中的字典(dict)与json字符串相互转化的方式. 1. ...

  5. 向mvc controller传递json数组

    对于这个主题我没有找到最合适的办法,只是找出了个可以暂时规避问题的方法.发到这里非常希望各位大侠,能给小弟些思路解决此问题. 一开始的需求 本想实现这么一个功能 这里的 var titles = [{ ...

  6. controller接收json数据_SpringMVC实现多种数据类型绑定

    点击上方"放学等我",选择"置顶公众号" 精品文章,第一时间送达 绑定基本数据类型 Java基本数据类型int的默认值是0,在使用int进行url传递参数时,参 ...

  7. Spring Boot笔记-controller接收json参数

    以前使用的是这样的方式获取JSON参数的 在controller端参数使用HttpServletRequest HttpServletRequest request 通过他的 request.getI ...

  8. controller接收json数据_SpringBoot实战(二):SpringMvc接收xml请求

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 最近在对接一个第三方系统,需要接收第三方系统的回调,而且格式为XML形式,之前自己一般 ...

  9. Vue前后台数据交互实例演示,使用axios传递json字符串、数组

    Vue 前后台数据交互实例演示 第一章:后台实现 ① Python 启用 Flask 服务器 ② 后台启用成功验证 第二章:前台实现 ① Vue 使用 Axios 实现接收 json 字符串.数组数据 ...

最新文章

  1. 致那些还在创业之路上孤独前行的青年大学生们!
  2. Hive的JDBC连接和数据查询功能
  3. vue-cli3.0 移动端适配
  4. ansible安装部署_运维日记|使用ansible批量部署crontab定时删归档任务
  5. 源码时代php中级项目,PHP学科项目评比圆满结束
  6. echarts 柱状图颜色_echarts的实战案例一些(二)
  7. linux的cimserver是什么服务,openpegasus的启动方式(即cimserver的启动方式)
  8. 2006年 上半年 网络管理员 下午试卷
  9. 镜像分割与高可用性灾难恢复
  10. 使用读写锁实现同步数据访问
  11. 风险投资,扼杀中国互联网创新的黑手
  12. Java dom序列化字符串,java – 如何在序列化之前从DOM中剥离仅空白的文本节点?...
  13. 华硕笔记本电脑<举例:华硕玩家国度G752VS>启动时/重装系统后开机会自动进入BIOS界面?
  14. Java商城系统后端和小程序模板、毕业设计下载
  15. quartz mysql表文件_quartz 持久化 数据库表
  16. 怎么将flv格式转换成mp4,四个步骤完成转换
  17. python的list怎么取后几个元素
  18. 北京大学医疗科技风论文答辩PPT模板
  19. (Python)sum函数的用法
  20. catia如何画花键_CATIA花键绘制万向节的装配及螺纹绘制

热门文章

  1. pip show pip可以查看pip的版本以及升级pip到最新版本
  2. 给大家推荐一款高逼格的Linux磁盘信息查看工具
  3. 最常问的MySQL面试题集合
  4. Java工程师该如何编写高效代码?
  5. SqlServer与.NET的数据类型映射关系图
  6. e4a html文本,E4A 怎么将剪贴版中的文本 粘贴到窗口的光标处啊?求个代码
  7. 【LeetCode】整数反转
  8. 若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?
  9. 「Vueconf」探索 Vue3 中 的 JSX
  10. 10个前端8个用Vue的,怎么才能在面试中出彩?