2011-06-13 58 views
1

我有一個通用的調度程序,它接受參數,然後使$ .ajax() 正如你所看到的,我循環參數建立數據。

function dispatch(controller, action, param1, param2,...) { 
    var args = '', pg = 1, id = ''; 
    var l = arguments.length; 
    var data = {}; 
    for (var i = 2; i < arguments.length; i += 2) { 
     data[arguments[i]] = arguments[i + 1]; 
    }    

    $.ajax({ 
     type: "POST", 
     url: "/" + (controller + "/" + action, 
     data: data, 
     dataType: "json", 
     success: function (res) { 
      alert('success'); 
     }, 
     error: function (xhr, status, error) { 
      alert('error!'); 
     } 
    }); 
} 

這是我怎麼稱呼:

dispatch("XYZ", "AddGuests", "id", 10, "name", "Bob"); 

一切正常,我得到的所有參數,回到我的MVC 3控制器。 現在我需要將multidimentional關聯數組作爲參數傳遞給我的控制器。 我想使用我用於其他調用的單個通用調度程序。 但不知何故,我得到關聯數組參數爲空。

基本上我想發佈一個賓客數組到我的控制器的List參數。

編寫代碼關聯數組數據:

var guest = {}; 
var guests = []; 

for(var i=0;i<2;i++){ 
    var name = GetName(); 
    var email = GetEmail(); 
    guest = { 'Email': email, 'Name': name }; 
    guests.push(guest); 
} 

循環的結束都會給我,說:

{ 
{'Email':"[email protected]", 'Name':"Bob"}, 
{'Email':"[email protected]", 'Name':"Tom"} 
} 

這是調度新的呼叫:

dispatch("XYZ", "AddGuests", "id", 10, "guests", JSON.stringify(guests)); 

這是我的控制器:

[HttpPost] 
public ActionResult AddGuests(string id, List<SelectedGuest> guests){ 
    //save guests 
} 

[Serializable] 
public class SelectedGuest 
{ 
    public string Email { get; set; } 
    public string Name { get; set; } 
} 

當我看的是HttpFox我看到正確的價值觀貼:

id 10 
guests [{"Email":"[email protected]","Name":"Bob"},{"Email":"[email protected]","Name":"Tom"}] 

如果我這樣做,我得到正確地傳遞給我的控制器來賓: 但是,這限制了我通過剛纔客人陣列不其他參數。

data = JSON.stringify(guests); 

我在做什麼錯了?謝謝閱讀。

回答

0

如果使用JSON.stringify(guests)工作,爲什麼不把它與另一個不需要字符串化的參數結合成另一個JSON對象?

data = { "id": 10, "Guests": JSON.stringify(guests) }; 

或者,您可以構建一個JavaScript對象,它將這些組合起來並調用stringify。

相關問題