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 后台接收集合参数和 jquery ajax 传值的更多相关文章

  1. Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解

    1.什么是WebApi,它有什么用途? Web API是一个比较宽泛的概念.这里我们提到Web API特指ASP.NET MVC Web API.在新出的MVC中,增加了WebAPI,用于提供REST ...

  2. 序列化json对象,通过ajax传入asp.net mvc后台

    序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台   今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...

  3. 解决Win10系统下 C# DateTime 出现星期几的问题 解决ASP.NET MVC 接受Request Playload参数问题

    解决Win10系统下 C# DateTime 出现星期几的问题 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToStri ...

  4. Mvc后台接收 参数

    @Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...

  5. 【总结】Asp.Net Mvc 后台控制器获取页面发来的参数类型

    接收各种参数(普通参数,对象,JSON, URL) 待续...

  6. Asp.net MVC中提交集合对象,实现Model绑定

    Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...

  7. Asp.net MVC中提交集合对象,实现Model绑定(转载)

    Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...

  8. spring mvc 如何传递集合参数(list,数组)

    spring mvc 可以自动的帮你封装参数成为对象,不用自己手动的通过request一个一个的获取参数,但是这样自动的参数封装碰碰到了集合参数可能就需要点小技巧才可以了. 一.基础类型和引用类型有什 ...

  9. Request.Params用法,后台接收httpget参数

    使用Request.Params["id"]来获取参数是一种比较有效的途径. request.params其实是一个集合,它依次包括request.querystring.requ ...

随机推荐

  1. 安卓Intent(隐式)

    相对于显式Intent(明确指出了目标组件名称的Intent),隐式Intent,没有明确指出目标组件名称.显式Intent直接用组件的名称定义目标组件,这种方式很直接.但是由于开发人员往往并不清楚别 ...

  2. Ajax无刷新提交表单和显示

    ajax无刷新表单提交:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  3. OC相关-02:oc和c的基本差异

    前言: 面向过程和面向对象. 简单的说,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不 ...

  4. Gulp那些好用的插件 2016.04.20

    开始接触LESS.组件化编程后,慢慢意识到需要一个提高工作效率的构建工具,就此接触到了Gulp. Gulp的好处在这里就不细说啦,只有四个API接口学起来简直爽歪歪,减少了大量的I/O操作,用起来很畅 ...

  5. linux创建守护进程

    守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...

  6. iterator迭代器的使用

    部分摘自C++ Primer: 所有的标准库容器类都定义了相应的iterator类型,如vector:vector<int>::iterator iter; 这条语句定义了一个名为iter ...

  7. ES 必备插件的安装

    1. elasticsearch-head插件的安装,非常好的插件 elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通 ...

  8. 修改hosts使用谷歌服务

    原文链接如下: http://www.findspace.name/res/72#_1

  9. 纯手工打造dropdownlist控件

    先上图吧,看看效果. JS代码: ; (function ($) { var DropdownList = function (oDataSouce, oControlsContainer, oLis ...

  10. Mysql主从复制,读写分离

    一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...