.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前台如何接收和解析后台的字典类型的数据
很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...
随机推荐
- 一些.Net面试题 (BS 方向)
http://www.cnblogs.com/PurpleTide/archive/2012/03/10/2389496.html 解决方案和思路类: 设计和策略: 1.有一个网站的中购买功能, 假设 ...
- 如何区分监督学习(supervised learning)和非监督学习(unsupervised learning)
监督学习:简单来说就是给定一定的训练样本(这里一定要注意,样本是既有数据,也有数据对应的结果),利用这个样本进行训练得到一个模型(可以说是一个函数),然后利用这个模型,将所有的输入映射为相应的输出,之 ...
- PHP MySQL 连接数据库 之 Connect
连接到一个 MySQL 数据库 在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接. 在 PHP 中,这个任务通过 mysql_connect() 函数完成. 语法 mysql_conn ...
- Timer和TimerTask
目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedR ...
- 所闻所获6:meditashayne项目总结
项目源码下载地址: https://github.com/ShayneYeorg/Meditashayne 1.首先一开始设计这个App的时候,我就希望它能比系统自带的备忘录更方便:比如备忘录需要手动 ...
- Java学习笔记50:JSONObject与JSONArray的使用
Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...
- ubuntu下安装xlrd模块,Mysqldb模块
Python中安装xlrd模块 1.从 https://pypi.python.org/pypi/xlrd 下载压缩包 2.解压所下载的压缩包 3.CD到解压文件夹,运行 sudo python s ...
- linux C读取数据库
上次我们已经共同学习了在Linux下C连接数据库,下面一起学习用C语言来操作数据库. 1,首先要打开mysql的服务 [root@bogon ~]# service mysqld statusmysq ...
- [扩展KMP][HDU3613][Best Reward]
题意: 将一段字符串 分割成两个串 如果分割后的串为回文串,则该串的价值为所有字符的权值之和(字符的权值可能为负数),否则为0. 问如何分割,使得两个串权值之和最大 思路: 首先了解扩展kmp 扩展K ...
- 《JavaScript 闯关记》之数组
数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引. JavaScript 数组是无类型的,数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型 ...