jQuery Ajax POSTing 数组到 ASP.NET MVC 控制器
Posted
技术标签:
【中文标题】jQuery Ajax POSTing 数组到 ASP.NET MVC 控制器【英文标题】:jQuery Ajax POSTing array to ASP.NET MVC Controller 【发布时间】:2011-05-23 01:39:51 【问题描述】:我在这里遗漏了一些东西。我有这个 jQuery javascript:
$.ajax(
type: "POST",
url: "/update-note-order",
dataType: "json",
data:
orderedIds: orderedIds,
unixTimeMs: new Date().getTime()
);
其中orderedIds
是一个JavaScript 数字数组(例如var orderedIds = [1, 2]
)。
处理Controller
的方法是:
[HttpPost]
public void UpdateNoteOrder(long[] orderedIds, long unixTimeMs)
...
当我将Debugger.Break()
放入UpdateNoteOrder()
时,orderedIds
在“监视”窗口中就是null
。 (不过,unixTimeMs
有一个数值。)
如何通过$.ajax()
传递数字数组,使orderedIds
在我的控制器中是long[]
?
【问题讨论】:
【参考方案1】:您需要将orderedId 转换为参数数组,否则控制器将看不到它
$.param( orderedIds: orderedIds );
在您的代码中:
$.ajax(
type: "POST",
url: "/update-note-order",
dataType: "json",
data:
orderedIds: $.param( orderedIds: orderedIds ),
unixTimeMs: new Date().getTime()
);
【讨论】:
这不起作用。在 UpdateNoteOrder 中,orderedIds 仍然为空。 如果它不起作用,请先检查您的代码,这直接取自 jquery 文档api.jquery.com/jQuery.param 您可能希望在拒绝答案之前确保您是正确的 我也可以确认这不起作用(我写了一个示例应用程序来测试它)。 我用 1.3.2 进行了测试,我现在看到更改是在 1.4 中。我想我最近没有更新 jquery。 在 jquery 1.3.2 中你甚至不需要$.param
,它可以开箱即用。不幸的是,在 jquery 1.4 中这种行为发生了变化。【参考方案2】:
只需将traditional
参数设置为true
即可:
$.ajax(
type: "POST",
url: "/update-note-order",
dataType: "json",
traditional: true,
data:
orderedIds: orderedIds,
unixTimeMs: new Date().getTime()
);
从 jquery 1.4 开始存在这个参数是因为将对象序列化为查询参数的机制发生了变化。
【讨论】:
不幸的是,在我的 Rails 应用程序中,我只得到数组的最后一个元素。我验证了浏览器正在正确发送数组。在上面的示例中,我将orderedIds: orderedIds
替换为 'orderedIds[]': orderedIds
以使其适用于 Rails。
伟大的。传统的 true 不是将 Viewmodel 用于简单的字符串数组,而是这样做。赞成!
我花了难以置信的时间试图在我的代码中找出这个问题,我偶然发现了这个宝石。感谢您的帮助。以上是关于jQuery Ajax POSTing 数组到 ASP.NET MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章
使用 MVC 5 在 Localhost 上使用 IISExpress 的 Ajax POSTing 和 CORS 预检错误
如何使用 jQuery $.ajax 将请求参数数组发送到 servlet?
jquery中通过ajax调用webservice传递数组参数的问题