2011-08-08 9 views
6

mi sento dejavu, ma non riesco a trovare la risposta a questa: Ho un array di oggetti che ha bisogno di guardare in questo modo quando si ispeziona un JQ $ .post chiamata:Jquery post per azione con dizionario Parametro

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

modo che sia associata nell'azione

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

Tuttavia, questo 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); 
     } 
) 

produce questo quando ispezione in Firebug:

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

Questo è in jq 1.4.2. Mi sembra di ricordare qualche bandiera che devi impostare per rendere json un modo diverso in jQ. Questo suona le campane?

risposta

3

Prova in questo modo:

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); 
    } 
}); 

dovrebbero mappare al seguente azione di controllo:

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

hai dimenticato il nome del parametro, dovrebbe essere dizionario [0] .key ma questo ha funzionato per me. Sono ancora confuso perché l'altro modo non lo è, ma grazie per un utile lavoro in giro. –

1

È possibile utilizzare questo flag -

jQuery.ajaxSetting.traditional = true; 

Per ottenere jQuery per inviare i dati in un formato diverso da quello che si sta vedendo. Vedere questa domanda per ulteriori informazioni -

Passing arrays in ajax call using jQuery 1.4

+0

purtroppo il flag' 'tradizionale non aiuta. quando viene usato post '[Object: Object]' quando visualizzato in firebug –

0

potrete vedere il post param come limiter[0][Key] perché jQuery serializza i dati JSON prima che lo invia. Questo è molto ben interpretato dall'azione del controller e si ottiene l'input richiesto nell'azione.

+0

sto postando questo perché non viene mappato, ma aggiornerò il mio codice per maggiore completezza per vedere se qualcuno può aiutare –

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

basta inviare l'obj come dataType: "json"