原文地址: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);
        }

.net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象的更多相关文章

  1. ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据

    本例旨在说明我的一种Controller接收ajax提交(POST)过来的json对象或数组信息的方式,感觉应该有更好的方式,欢迎提出宝贵意见. JSON.stringify(jsonObj)不支持I ...

  2. .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二)

    .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一) 上一篇主 ...

  3. .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一)

    .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) Json是WEB交互常见的数据,.net core 处理方式是转为强类型,没有对应的强类型会被抛弃,有时 ...

  4. Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)

    Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办 ...

  5. .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫

    .net mvc前台如何接收和解析后台的字典类型的数据   很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...

  6. JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"

    将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...

  7. JSON字符串和Dictionary字典类型的相互转换

    在开发过程中,往往会遇到数据类型转换的情况,根据自己的业务,可能转换类型有多种,下面就说一下json字符串和字典类型的转换. public static class JsonUntity { /// ...

  8. ASP.NET MVC Controller向View传值方式总结

    Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...

  9. .net mvc前台如何接收和解析后台的字典类型的数据

    很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...

随机推荐

  1. 关于Keil C51中using关键字的使用心得

    刚才看到一位很牛的师兄写的一篇日志中提到了Keil C51中using这个关键字的用法,粗心的我本来一直都没有留意它是用来干嘛的(因为我一般看见它都是在中断服务函数的定义开头处,好像没有了它也可以中断 ...

  2. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  3. Wpf中MediaElement循环播放

    原文:Wpf中MediaElement循环播放 前一段时间做了一个项目,里面牵涉到媒体文件的循环播放问题,在网上看了好多例子,都是在xaml中添加为MediaElement添加一个TimeLine,不 ...

  4. Mysql.Data的连接驱动 .net 的源码竟然在git了

    如标题 上链接:https://github.com/mysql/mysql-connector-net

  5. java.net.SocketTimeoutException: Read timed out

    If you get java.net.SocketTimeoutException: Read timed out exception Try setting own timeout value w ...

  6. RIAidea – Focus on Flash/Flex/AIR » About Me

    RIAidea – Focus on Flash/Flex/AIR » About Me Browse > Home > About Me Tuesday, May 20, 2014 | ...

  7. 改变UITableViewCell按下去的颜色

    UIView *bgColorView = [[UIView alloc] init]; [bgColorView setBackgroundColor:[UIColor redColor]]; [c ...

  8. 总结 XSS 与 CSRF 两种跨站攻击

    前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...

  9. Trie树|字典树(字符串排序)

    有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...

  10. BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】

    称号:Harry And Dig Machine 哈哈  最终涨边粉色了,不easy呀.顺便写一道题解吧 题意:给一个m*n的矩阵,然后当中最多由10个有值,求总左上角把全部的值都拿上回到左上角的最小 ...