2011-08-08 8 views
6

me siento dejavu, pero no puedo encontrar la respuesta a esto: Tengo una matriz de objetos que tiene que tener este aspecto cuando la inspección de una llamada jQ $ .post:posterior Jquery a la acción con el diccionario de parámetros

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

de modo que se asigna en la acción

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

Sin embargo, esto 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 esto cuando la inspección en Firebug:

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

Esto está en JQ 1.4.2. Me parece recordar alguna bandera que necesitas configurar para representar json de una manera diferente en jQ. ¿Esto te suena familiar?

Respuesta

3

Trate de esta manera:

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

debe asignar a la siguiente acción del controlador:

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

olvidó el nombre del parámetro, debería ser dictionary [0] .key, pero esto funcionó para mí. Todavía estoy confundido por qué no lo hace de la otra manera, pero gracias por un trabajo útil. –

1

Se puede usar esta bandera -

jQuery.ajaxSetting.traditional = true; 

Para obtener jQuery para enviar los datos en un formato diferente a la que que está viendo. Ver esta cuestión para más información -

Passing arrays in ajax call using jQuery 1.4

+0

por desgracia, el 'flag' tradicional no ayuda. cuando lo usé, posteé '[Object: Object]' cuando lo veo en firebug –

0

verá el parámetro puesto como limiter[0][Key] porque jQuery serializa los datos JSON antes de que lo publica. Esto se interpreta muy bien con la acción del controlador y se obtiene la entrada requerida en la acción.

+0

lo publico porque no está siendo mapeado, pero actualizaré mi código para ver si alguien puede ayudarlo –

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

acaba de enviar su obj como tipo de datos: "json"

Cuestiones relacionadas