2011-08-08 13 views
6

czuję DejaVu, ale nie mogę znaleźć odpowiedzi na to: Mam tablicę obiektów, które musi wyglądać podczas inspekcji jQ $ .post połączenia:Jquery Post do działania z słownik parametryczny

limiter[0].Key 
limiter[0].Value 

tak, że jest odwzorowywany w działaniu

public ActionResult SomeAction(Dictionary<Guid, string> dictionary) { } 

jednak ta javascript:

// Some Guid and Some Value 
var param = [ { 'Key' : '00000000-0000-00000-000000', 'Value': 'someValue' } ]; 

$.post('/SomeController/SomeAction/', 
     { 
     dictionary: limiter, 
     otherPostData: data 
     }, 
     function(data) { 
      callback(data); 
     } 
) 

produkuje to podczas sprawdzania go w Firebug:

limiter[0][Key] = someKey // Guid Value 
limiter[0][Value] = someValue 

Jest to JQ 1.4.2. Wydaje mi się, że pamiętam jakąś flagę, którą musisz ustawić, aby renderować json w inny sposób w jQ. Czy to dzwoni jakieś dzwonki?

Odpowiedz

3

Spróbuj tak:

var param = { 
    '[0].Key': '28fff84a-76ad-4bf6-bc6d-aea4a30869b1', 
    '[0].Value': 'someValue 1', 

    '[1].Key': 'd29fdac3-5879-439d-80a8-10fe4bb97b18', 
    '[1].Value': 'someValue 2', 

    'otherPostData': 'some other data' 
}; 

$.ajax({ 
    url: '/Home/SomeAction/', 
    type: 'POST', 
    data: param, 
    success: function (data) { 
     alert(data); 
    } 
}); 

należy mapować do następnego działania kontrolera:

public ActionResult SomeAction(Dictionary<Guid, string> dictionary, string otherPostData) 
{ 
    ... 
} 
+0

zapomniałeś nazwy parametru, powinien być słownik [0] .key, ale to działało dla mnie. Wciąż jestem zdezorientowany, dlaczego nie jest inaczej, ale dzięki za pomocną pracę. –

1

Możesz użyć tej flagi -

jQuery.ajaxSetting.traditional = true; 

Aby uzyskać jQuery aby umieścić dane w innym formacie do jednego widzisz. Zobacz to pytanie do dalszych informacji -

Passing arrays in ajax call using jQuery 1.4

+0

niestety 'tradycyjny flag' nie pomaga. w przypadku użycia go po "[Object: Object]", gdy przeglądam w firebugu –

0

Zobaczysz param stanowiska limiter[0][Key] ponieważ jQuery serializes danych json przed księguje go. Jest to bardzo dobrze interpretowane przez działanie kontrolera i dostajesz wymagane dane wejściowe w akcji.

+0

, zamieszczam to, ponieważ nie jest on mapowany, ale zaktualizuję mój kod, aby uzyskać więcej informacji, aby sprawdzić, czy ktoś może pomóc –

0
var dict = {} 
dict["key1"] = 1 
dict["key2"] = 2 
dict["key3"] = 3 

$.ajax({ 
     type: "POST", 
     url: "/File/Import", 
     data: dict, 
     dataType: "json" 
}); 

public void Import(Dictionary<string, int?> dict) 
{ 
} 

tylko wysłać OBJ jako Typ danych: "json"