ASP.NET MVC中向Controller传递数组的几种方式
从浏览器中提交的哪些形式的参数能够被MVC识别为数组参数?
1.name=1&name=2&name=3
2.name[0]=1&name[1]=2&name[2]=3
3.[0]=1&[1]=2&[2]=3
4.{name:[1,2,3]}
一般情况下只要将数组参数改为以上四种形式中的任意一种即可不需要修改任何后端代码即可实现数组的传递。
假设后台controller、action
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public ActionResult Exec(long[] array) { if(array!=null) { foreach(var l in array) { Response.Write(l); Response.Write(“<br />”); } } return Content(""); } |
前台jQuery.ajax
1 2 3 4 5 6 7 8 9 10 |
var data={array:[1,2,3]}; $.ajax({ url:”/ajax”, data:data, success:function(r) { alert(r); } }); |
默认情况下上面这种形式提交后,Controller是获取不到数组的,通过调试工具看一下就会知道原因了,
{array:[1,2,3]} 被转换成了array[]=1&array[]=2&array[]=3的参数形式,参数名被改成了array[],导致取不到array的实际参数。
1.改成name=1&name=2&name=3形式
1 2 3 4 5 6 7 8 9 10 |
$.ajax({ url:”/ajax”, traditional:true, data:data, success:function(r) { alert(r); } }); |
使用traditional即可将{array:[1,2,3]}转换为array=1&array=2&array=3的形式。
2.改成name[0]=1&name[1]=2&name[2]=3的形式,将data参数改为一下形式
1 2 3 4 |
data[“name[0]”]=1; data[“name[1]”]=2; data[“name[2]”]=3; |
3.改成[0]=1&[1]=2&[2]=3的形式,将上面(2)的name去掉即可
4.改成{name:[1,2,3]}形式,注意这里是字符串,而不是json对象,所以你需要将data序列化成字符串,同时提交到后台时需要设置类型为json类型,这样后台处理时才会作为json对象。
1 2 3 4 5 6 7 8 9 10 11 12 |
var data=JSON.stringgify({name:[1,2,3]});//序列化 $.ajax({ url:”/ajax”, contentType:”application/json”,//设置格式 type:”POST”,//要POST才行 data:data, success:function(r) { alert(r); } }); |
一般前台处理的方式就这四种,根据自己的需要使用适合自己的就行了,鉴于json的便利性,如果是ajax之类的最好直接用json形式传递,编码也相对能简单些,如果是form直接提交就可以直接用前三种方式了。
如果你有更好的方式欢迎交流。