2012-06-15 20 views
13

tengo ModeloUrl Codificar Javascript objeto literal

public class SomeModel 
{ 
    public string SomeText { get; set; } 
} 

en JavaScript hago un objeto JavaScript literal del modelo:

var model = { 
       SomeText: "test" 
      }; 
var serializedData = JSON.stringify(model); 

Esto hace que una cadena que tiene el siguiente aspecto:

"{"SomeText":"test"}" 

Ahora supongamos que quiero enviar este modelo a un controlador que acepta un modelo de este tipo con los siguientes functi en:

public void Index(SomeModel model) 
{ 
} 

Lo que necesito es una cadena de URL en la que el modelo tiene la siguiente forma:

"?SomeText=test" 

Sé que Ajax hace exactamente esto cuando se envía el modelo a través de AJAX mensaje:

$.ajax({type:"POST", 
     url: "someUrl", 
     data: serializedData, 
     ... 
}); 

El 'datos:' url-codifica los datos serializados.

Pero en realidad no quiero utilizar Ajax, por lo que necesito para construir esta url mí mismo. Quiero hacer exactamente lo mismo que ajax con 'data:'. ¿Cómo puedo codificar por URL los datos serializados?

+0

Consulte http://api.jquery.com/jQuery.par am/ –

Respuesta

33

Debe utilizar jQuery.param:

$.param({foo:'bar', fizz:'buzz'}); 
//produces foo=bar&fizz=buzz 

Las matrices son bien también:

$.param({foo:['bar', 'baz']}); 
//produces foo%5B%5D=bar&foo%5B%5D=baz 
//which is the url encoded form of: foo[]=bar&foo[]=baz 

si necesita la sintaxis de matrices tradicionales, el uso del segundo parámetro:

$.param({foo:['bar','baz']}, true); 
//produces foo=bar&foo=baz 
+0

Exactamente lo que necesitaba, gracias, pero tengo que comprobar aún más debido a que el modelo contiene una lista realidad ... – JayAr

-2

Para escapar de un solo valor, tiene la función Javascript escape. Debe proporcionar su propia función para recorrer el objeto, agregar las claves, y así sucesivamente.

EDITAR

Esailija es la amabilidad de recordarme que escape no maneja muchos casos comunes correctamente, y encodeURIComponent es mucho mejor. Si ya está utilizando jQuery (y debería hacerlo), la respuesta de zzzzBov es aún mejor.

+0

No utilice 'escape', ver http://stackoverflow.com/a/3608791/995876 – Esailija

Cuestiones relacionadas