【问题标题】:Proper technique to pass javascript array to controller with List<int> parameter使用 List<int> 参数将 javascript 数组传递给控制器​​的正确技术
【发布时间】:2015-12-16 21:37:56
【问题描述】:

我有一个带有List&lt;int&gt; 的控制器,我从 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

我已经看过this question 关于将数组传递给带有List&lt;int&gt; 参数的控制器,但该解决方案似乎对我不起作用。我做错了什么?

【问题讨论】:

  • 你能编辑并提供实际的网络请求吗?您的 JSON 格式可能不正确。
  • 哦,呃……我应该想到的。是的,马上就来。
  • 添加了 fiddler 捕获
  • 看起来值正在被传递(作为单独的查询字符串参数),这应该起作用。这必须是GET 吗? POST 可能会让你更幸运。
  • 你为什么在路由定义中使用majorareas=new List&lt;int&gt;()?

标签: javascript c# ajax


【解决方案1】:

看起来网络请求正在正确生成。问题出在路由定义中:

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

majorareas=new List&lt;int&gt;() 将确保 majorareas 始终是一个空列表,即使它会被填充!

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多