.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);
}
.net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象的更多相关文章
- ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据
本例旨在说明我的一种Controller接收ajax提交(POST)过来的json对象或数组信息的方式,感觉应该有更好的方式,欢迎提出宝贵意见. JSON.stringify(jsonObj)不支持I ...
- .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二)
.net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一) 上一篇主 ...
- .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一)
.net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) Json是WEB交互常见的数据,.net core 处理方式是转为强类型,没有对应的强类型会被抛弃,有时 ...
- Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)
Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办 ...
- .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫
.net mvc前台如何接收和解析后台的字典类型的数据 很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...
- JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"
将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...
- JSON字符串和Dictionary字典类型的相互转换
在开发过程中,往往会遇到数据类型转换的情况,根据自己的业务,可能转换类型有多种,下面就说一下json字符串和字典类型的转换. public static class JsonUntity { /// ...
- ASP.NET MVC Controller向View传值方式总结
Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...
- .net mvc前台如何接收和解析后台的字典类型的数据
很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...
随机推荐
- 关于Keil C51中using关键字的使用心得
刚才看到一位很牛的师兄写的一篇日志中提到了Keil C51中using这个关键字的用法,粗心的我本来一直都没有留意它是用来干嘛的(因为我一般看见它都是在中断服务函数的定义开头处,好像没有了它也可以中断 ...
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...
- Wpf中MediaElement循环播放
原文:Wpf中MediaElement循环播放 前一段时间做了一个项目,里面牵涉到媒体文件的循环播放问题,在网上看了好多例子,都是在xaml中添加为MediaElement添加一个TimeLine,不 ...
- Mysql.Data的连接驱动 .net 的源码竟然在git了
如标题 上链接:https://github.com/mysql/mysql-connector-net
- java.net.SocketTimeoutException: Read timed out
If you get java.net.SocketTimeoutException: Read timed out exception Try setting own timeout value w ...
- RIAidea – Focus on Flash/Flex/AIR » About Me
RIAidea – Focus on Flash/Flex/AIR » About Me Browse > Home > About Me Tuesday, May 20, 2014 | ...
- 改变UITableViewCell按下去的颜色
UIView *bgColorView = [[UIView alloc] init]; [bgColorView setBackgroundColor:[UIColor redColor]]; [c ...
- 总结 XSS 与 CSRF 两种跨站攻击
前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...
- Trie树|字典树(字符串排序)
有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...
- BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】
称号:Harry And Dig Machine 哈哈 最终涨边粉色了,不easy呀.顺便写一道题解吧 题意:给一个m*n的矩阵,然后当中最多由10个有值,求总左上角把全部的值都拿上回到左上角的最小 ...