2012-06-15 18 views
13

Ho ModelloURL Encode JavaScript Object letterale

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

in JavaScript faccio un oggetto JavaScript letterale del modello:

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

Questo rende una stringa che è simile alla seguente:

"{"SomeText":"test"}" 

Ora supponiamo di voler inviare questo modello a un controller che accetta un modello come questo con le seguenti funzioni on:

public void Index(SomeModel model) 
{ 
} 

cosa ho bisogno è una stringa URL in cui il modello ha la seguente forma:

"?SomeText=test" 

So che l'Ajax fa esattamente questo quando si invia il modello tramite la tecnologia AJAX posta:

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

I 'dati:' url-codifica i dati serializzati.

Ma in realtà non voglio usare ajax, quindi ho bisogno di costruire questo URL da solo. Voglio fare esattamente la stessa cosa che fa ajax con "data:". Come posso url-codificare i dati serializzati da solo?

+0

Dai un'occhiata a http://api.jquery.com/jQuery.par am/ –

risposta

33

Si dovrebbe usare jQuery.param:

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

Gli array sono ok troppo:

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

se è necessario la sintassi di matrice tradizionale, utilizzare il secondo parametro:

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

Esattamente ciò di cui avevo bisogno, grazie, ma ho bisogno di controllare ulteriormente perché il modello contiene una lista in realtà ... – JayAr

-2

Per evitare un singolo valore, Javascript ha la funzione escape. È necessario fornire la propria funzione per scorrere l'oggetto, aggiungere le chiavi e così via.

EDIT

Esailija è così gentile da ricordarmi che escape non gestisce molti casi comuni correttamente, e encodeURIComponent è molto meglio. Se stai già usando jQuery (e dovresti esserlo), la risposta di zzzzBov è ancora meglio.

+0

Non usare 'escape', vedi http://stackoverflow.com/a/3608791/995876 – Esailija