2012-06-15 6 views
13

littéral J'ai modèleobjet Url Encode javascript

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

En javascript je fais un objet javascript littéral du modèle:

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

Cela fait une chaîne qui ressemble à ce qui suit:

"{"SomeText":"test"}" 

Maintenant, supposons que je veux envoyer ce modèle à un contrôleur qui accepte un modèle comme celui-ci avec les foncti sur:

public void Index(SomeModel model) 
{ 
} 

Ce que je besoin est une chaîne url dans laquelle le modèle a la forme suivante:

"?SomeText=test" 

Je sais que ajax fait exactement quand vous envoyez le modèle via ajax message:

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

Les données ':' url-code les données sérialisées.

Mais en fait, je ne veux pas utiliser ajax, donc j'ai besoin de construire cette URL moi-même. Je veux faire exactement la même chose que ajax avec 'data:'. Comment puis-je encoder moi-même les données sérialisées?

+0

Découvrez http://api.jquery.com/jQuery.par am/ –

Répondre

33

Vous devez utiliser jQuery.param:

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

Les tableaux sont ok aussi:

$.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 vous avez besoin de la syntaxe de tableau traditionnel, utilisez le second paramètre:

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

Exactement ce dont j'avais besoin, merci, mais j'ai besoin de vérifier plus loin car le modèle contient en fait une liste ... – JayAr

-2

Pour éviter une seule valeur, Javascript a la fonction escape. Vous devez fournir votre propre fonction pour parcourir l'objet, ajouter les clés, etc.

EDIT

Esailija est assez aimable pour me rappeler que escape ne gère pas correctement de nombreux cas communs, et encodeURIComponent est beaucoup mieux. Si vous utilisez déjà jQuery (et vous devriez l'être), la réponse de zzzzBov est encore meilleure.

+0

Ne pas utiliser 'escape', voir http://stackoverflow.com/a/3608791/995876 – Esailija