2010-08-11 21 views
1

我試圖嵌套數組傳遞到一個asp.net MVC控制器是這樣的:

var subgroups = []; 
subgroups [0] = [["A", "Y"], 
       ["B", "Y"], 
       ["C", "Y"]]; 
subgroups [1] = [["D", "Z"], 
       ["E", "Z"], 
       ["F", "Z"]]; 

$.ajax({ url: "<%= Url.Content("~/Controller/Action") %>", data: { subgroups: subgroups }, 
     dataType: "json", context: document.body, success: function(data) { ... }); 

所得控制器:

public ContentResult Action(List<string[][]> subgroups) { 
    ... 
} 

問題是在控制器中的子組產生的變量是這樣的:從深

subgroups[0][0] == null; 
subgroups[0][1] == null; 
subgroups[0][2] == null; 
subgroups[1][0] == null; 
subgroups[1][1] == null; 
subgroups[1][2] == null; 

的值ly嵌套數組不會通過。 Firebug的報道我的Ajax請求的參數是:

subgroups[0][0][] A 
subgroups[0][0][] Y 
subgroups[0][1][] B 
subgroups[0][1][] Y 
subgroups[0][2][] C 
subgroups[0][2][] Y 
subgroups[1][0][] D 
subgroups[1][0][] Z 
subgroups[1][1][] E 
subgroups[1][1][] Z 
subgroups[1][2][] F 
subgroups[1][2][] Z 

它看起來像的原因是jQuery是不是在這些數組索引填充,因爲我可以解決這個問題是我格式化數據:

subgroups [0] = [{ 0: "A", 1: "Y"}, ...]; 

爲什麼jQuery將外部數組的索引,而不是內部的?請告訴我有一個更好的解決方法,比手動指定數字鍵?

回答

1

文件 「code.jquery.com/jquery-1.4.2.js」 符合5290:

buildParams(prefix + "[" + (typeof v === "object" jQuery.isArray(v) ? i : "") + "]", v); 

我改變了這樣的代碼:

buildParams(prefix + (typeof v === "object" jQuery.isArray(v) ? "[" + i + "]" : ""), v); 

,結果是好的。我無法測試更多的案例。

我創建jQuery.com一票,看看這是一個錯誤: Ticket #6900 (new bug)

但在:

public ContentResult Action(List<string[][]> subgroups) { 

這一修改,你必須使用此代碼:

public ContentResult Action(List<string[]> subgroups) { 
+0

+1爲是最勇敢的男人的jQuery我所遇到:) – Jimbo 2010-08-13 06:20:02

+0

您的解決方案一個也不太爲我工作,但它幫我找到通過改變線5419的解決方案: 'buildParams(前綴+「[」+ i +「]」,v);' 謝謝你打開一個錯誤報告,並引導我找到一個解決方案。我不確定這是一個錯誤還是有意的jQuery行爲,但對於運行ASP.net MVC的人來說,這種行爲似乎更有用。 – 2010-08-17 14:59:04

+0

是的,我複製了錯誤的行號,右邊是5419.謝謝 – 2010-08-17 16:20:11

0

如果有人像我這樣做了這個問題的絆腳石,但不喜歡修改jQuery來處理您的特定服務器軟件的想法,我最終使用JSON.stringify()將嵌套數組的JSON字符串傳遞給服務器,然後在服務器上解碼該JSON字符串。