将javascript数组传递给List<int>参数

Proper technique to pass javascript array to controller with List<int> parameter

本文关键字:lt gt 参数 int List 数组 javascript      更新时间:2023-09-26

我有一个接受List<int>的控制器,我从AJAX调用它。控制器被击中,但参数始终为null

我的控制器:

public ActionResult MinorAreas(List<int> majorareas)
{
    // ...
}

jQuery调用:

function onChange(e)
{
   var cur = this.value(); // an array of numbers like [2,4,7,9]
   $.ajax({
       cache: false,
       type: "GET",
       traditional: true,
       url: "@(Url.RouteUrl("GetMinorAreas"))",
       data: { "majorareas": cur},
       success: function (data) {...},
       error: function (xhr, ajaxOptions, thrownError) {... }
   });
 }

路线定义:

routes.MapLocalizedRoute(
    "GetMinorAreas",
    "minorAreas",
    new { controller="ProSearch", action="MinorAreas", majorareas=new List<int>() },
    new[] { "ABC.ZZZ.Controllers" }
);

使用fiddler,我可以看到URI是正确构建的:

# With an array of [2]
http://localhost:15536/minorAreas?majorareas=2&_=1450307693166
# With an array of [2,3,9]
http://localhost:15536/minorAreas?majorareas=2&majorareas=3&majorareas=9&_=1450308261808

我已经研究过这个关于将数组传递给带有List<int>参数的控制器的问题,但这个解决方案似乎对我不起作用。我做错了什么?

看起来网络请求的生成是正确的。问题在于路线定义:

routes.MapLocalizedRoute(
    "GetMinorAreas",
    "minorAreas",
    new { controller="ProSearch", action="MinorAreas", majorareas=new List<int>() },
    new[] { "ABC.ZZZ.Controllers" }
);

majorareas=new List<int>()将确保majorareas始终是一个空列表,即使在其他情况下它也会被填充!

您不必在此处定义参数;控制器中的方法定义就是这样做的。关掉它,它应该会正常工作:

routes.MapLocalizedRoute(
    "GetMinorAreas",
    "minorAreas",
    new { controller="ProSearch", action="MinorAreas" },
    new[] { "ABC.ZZZ.Controllers" }
);