2010-12-09 153 views
57

我很想念这里的东西。我有这样的jQuery JavaScript的:jQuery Ajax将数组发送到ASP.NET MVC控制器

$.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) 
{ 
    ... 
} 

当我在UpdateNoteOrder()Debugger.Break()orderedIds是在监视窗口null。 (unixTimeMs,然而,有一个数值。)

我如何通过数字阵列通过$.ajax()这样orderedIds是我控制器long[]

回答

123

只需设置traditional参数true

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    traditional: true, 
    data: { 
     orderedIds: orderedIds, 
     unixTimeMs: new Date().getTime() 
    } 
}); 

由于jquery 1.4这个参数的存在是因为机制将对象序列化为查询参数已更改。

0

你需要把orderedId的成参数数组,或控制器将不会看到它

$.param({ orderedIds: orderedIds }); 

在你的代码:

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    data: { 
     orderedIds: $.param({ orderedIds: orderedIds }), 
     unixTimeMs: new Date().getTime() 
    } 
}); 
+2

这不起作用。在UpdateNoteOrder中,orderedIds仍然为空。 – AgileMeansDoAsLittleAsPossible 2010-12-09 19:19:04

+0

如果它不起作用,请先检查您的代码,这是直接从jquery文档http://api.jquery.com/jQuery.param/中获取的。您可能想在拒绝答案之前确定您的答案是正确的 – 2010-12-09 19:22:17

相关问题