2012-06-15 8 views
13

Ich habe ModellURL Encode JavaScript-Objekt wörtliche

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

In Javascript ich ein Javascript Objektliteral des Modells machen:

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

Das eine Zeichenfolge macht, die wie folgt aussieht:

"{"SomeText":"test"}" 

Angenommen, ich möchte dieses Modell an einen Controller senden, der ein solches Modell mit den folgenden Funktionen akzeptiert auf:

public void Index(SomeModel model) 
{ 
} 

Was ich brauche, in dem eine URL-Zeichenfolge ist das Modell die folgende Form besitzt:

"?SomeText=test" 

Ich weiß, dass Ajax tut genau dies, wenn Sie das Modell über Ajax Post schicken:

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

Die 'Daten:' url-codiert die serialisierten Daten.

Aber ich möchte eigentlich keine Ajax verwenden, also muss ich diese URL selbst erstellen. Ich möchte genau dasselbe tun wie Ajax mit 'Daten:'. Wie kann ich die serialisierten Daten selbst url-codieren?

+0

Überprüfen Sie http://api.jquery.com/jQuery.par am/ –

Antwort

33

sollten Sie jQuery.param verwenden:

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

Arrays sind auch ok:

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

wenn Sie die traditionelle Array-Syntax benötigen, verwenden Sie den zweiten Parameter:

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

Genau das, was ich brauchte, danke, aber ich muss weiter überprüfen, weil das Modell tatsächlich eine Liste enthält ... – JayAr

-2

Um einen einzelnen Wert zu umgehen, hat Javascript die Funktion escape. Sie müssen eine eigene Funktion bereitstellen, um das Objekt zu durchlaufen, die Schlüssel hinzuzufügen usw.

EDIT

Esailija ist nett genug, um mich daran zu erinnern, dass escape nicht viele gängige Fälle richtig, und encodeURIComponent ist viel besser umgehen kann. Wenn Sie bereits jQuery verwenden (und Sie sollten es sein), ist zzzzBovs Antwort noch besser.

+0

Verwenden Sie nicht 'escape', siehe http://stackoverflow.com/a/3608791/995876 – Esailija