MVC 接收参数数组(集合)
示例样本:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
...
}
// ASP.NET MVC
[HttpPost]
public ActionResult Create(List<Person> persons)
{
// doSomething.
}
ASP.NET MVC 后台 "Create" Action 中要接收 "persons" 参数集合,实际上要传入参数格式为:
"persons[0].FirstName=yang1&persons[0].LastName=gang1&persons[1].FirstName=yang2&persons[1].LastName=gang2 ..." 或是(
"persons[0][FirstName]=yang1&persons[0][LastName]=gang1&persons[1][FirstName]=yang2&persons[1][LastName]=gang2 ..." 格式),这样 MVC 后台才能解析参数并将值正确地绑定到指定 persons 参数实体上。
也可以使用 "[0].FirstName=yang1&[0].LastName=gang1&[1].FirstName=yang2&[1].LastName=gang2 ..." 或是(
"[0][FirstName]=yang1&[0][LastName]=gang1&[1][FirstName]=yang2&[1][LastName]=gang2 ..." 格式)
等没有前缀数组,这样 Action 中的参数名可自定义指定。在 Action 参数只要唯一一个时很好用。
值得注意的是,这种以类似于数组形式传递的参数,初始基数必须为 0, 且基数值必须连续,不然后续的值会被丢失。举个例子:有参数 [0]、 [1]、 [2]、[4]、[5] ... 等一系列项数据,其中缺失 [3], 这样 Action 中参数最终值只有 [0]、[1] 和 [2] 三项,其他将被忽略。
对于中 Action 中简单类型的参数集合,如 List<string>, List<int> 等,直接使用 "arg=1&arg=2&arg=3 ..." 即可。
前端 form 提交
form 中提交很简单,只要将 <input /> 等标签 name 参数设定为数组即可。
<form action="..." method="post">
// item1
<input name="persons[0].FirstName" />
<input name="persons[0].LastName" />
// item2
<input name="persons[1].FirstName" />
<input name="persons[1].LastName" />
</form>
为了自定义 Action 中参数名(参数个数只有一个),也可以使用 [0].FirstName,[1].FirstName 等,如下:
<form action="..." method="post">
// item1
<input name="[0].FirstName" />
<input name="[0].LastName" />
// item2
<input name="[1].FirstName" />
<input name="[1].LastName" />
</form>
其中,persons[0].FirstName 可设置为 persons[0][FirstName] 格式,同样 [0].FirstName 可设置为 [0][FirstName] 格式。
前端 ajax 提交
方式一
var _list = {};
for (var i = 0; i < length; i++) {
_list["persons[" + i + "].FirstName"] = '..';
_list["persons[" + i + "].LastName"] = '..';
}
$.ajax({
url: '...',
data: _list,
dataType: "json",
type: "POST",
success: function (data) {
// your logic
}
});
方式二
var _list = [];
for (var i = 0; i < length; i++) {
_list.push({ FirstName: "", LastName: "" });
}
$.ajax({
url: '...',
data: { "persons": _list },
dataType: "json",
type: "POST",
success: function (data) {
// your logic
}
});
ajax 中都会对参数进行转换(jQuery.param() 方法),方式一中是直接将对象 key 和 value 串联起来,方式二中将对象中 value 的数组转换后拼接起来,最终效果如下。这两种方式生成的参数格式都满足 MVC 接收参数的数据格式。
jQuery.post()
jQuery.post() 是 jQuery.ajax() post 方式的一种简便方式,使用上与调用底层 ajax 相同。
jQuery.param() 方法
var params = {
persons: [
{ FirstName: "yang1", LastName: "gang1" },
{ FirstName: "yang2", LastName: "gang2" }
]
};
jQuery.param(params, false);
输出结果为:
persons%5B0%5D%5BFirstName%5D=yang1&persons%5B0%5D%5BLastName%5D=gang1&persons%5B1%5D%5BFirstName%5D=yang2&persons%5B1%5D%5BLastName%5D=gang2
使用 decodeURIComponent 解析后为:
persons[0][FirstName]=yang1&persons[0][LastName]=gang1&persons[1][FirstName]=yang2&persons[1][LastName]=gang2
可以看出,js 对象经过 jQuery.param() 方法转换后,满足上述 MVC 接收参数的数据格式。
参考文章:
- Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解
1.什么是WebApi,它有什么用途? Web API是一个比较宽泛的概念.这里我们提到Web API特指ASP.NET MVC Web API.在新出的MVC中,增加了WebAPI,用于提供REST ...
- 序列化json对象,通过ajax传入asp.net mvc后台
序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台 今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...
- 解决Win10系统下 C# DateTime 出现星期几的问题 解决ASP.NET MVC 接受Request Playload参数问题
解决Win10系统下 C# DateTime 出现星期几的问题 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToStri ...
- Mvc后台接收 参数
@Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...
- 【总结】Asp.Net Mvc 后台控制器获取页面发来的参数类型
接收各种参数(普通参数,对象,JSON, URL) 待续...
- Asp.net MVC中提交集合对象,实现Model绑定
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...
- Asp.net MVC中提交集合对象,实现Model绑定(转载)
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...
- spring mvc 如何传递集合参数(list,数组)
spring mvc 可以自动的帮你封装参数成为对象,不用自己手动的通过request一个一个的获取参数,但是这样自动的参数封装碰碰到了集合参数可能就需要点小技巧才可以了. 一.基础类型和引用类型有什 ...
- Request.Params用法,后台接收httpget参数
使用Request.Params["id"]来获取参数是一种比较有效的途径. request.params其实是一个集合,它依次包括request.querystring.requ ...
随机推荐
- Linux安装Jdk,CentOS安装Jdk
Linux安装Jdk,CentOS安装Jdk >>>>>>>>>>>>>>>>>>>& ...
- json 是什么
怎么学习一个知识? 首先要提出几个问题,目前认为json是个什么,json是谁创造的,为什么而出现的,但是目前仅有很长时间之前别人直接告诉我的,json用来存数据的,对于使用也忘记的差不多了,所以现在 ...
- (转)教你如何使用php session
PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览 ...
- .NET设计模式(10):装饰模式(Decorator Pattern)
.NET设计模式(10):装饰模式(Decorator Pattern) 装饰模式(Decorator Pattern) --.NET设计模式系列之十 年月..在....对于..由于使用装饰模 ...
- 面向报文(UDP)和面向字节流(TCP)的区别
转载:http://blog.csdn.net/wanghaobo920/article/details/11877589 面向报文(UDP)和面向字节流(TCP)的区别 面向报文的传输方式是应用层交 ...
- mvc5 + ef6 + autofac搭建项目(三)
前面已经基本完成了框架的搭建,后面就是实现了,后面主要说下前端的东西bootstrap的使用和相关插件. 看图: 实现比较简单,在主页面只引入共用部分的 js等相关包,毕竟不是所有页面都需要列表以及其 ...
- UITextField 对输入金额的约束
[2016/1/18更新] -- 五个人辛辛苦苦干了一年的项目终于上线了,今天有空看了一下正则表达式教程,然后开始rebuild之前的种种对字符串的约束,首先就从这个金额输入框开始吧,修改后的代码如下 ...
- power shell upload file to azure storage
# Azure subscription-specific variables. $storageAccountName = "storage-account-name" $con ...
- 初尝 MVC4
文章内容参考 http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html 开发环境 VS2010 ,VS2010 开发 MVC4 需下 ...
- WPF 带CheckBox、图标的TreeView
WPF 带CheckBox.图标的TreeView 在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提 ...