2013-02-06 6 views
14

Ich sammle ein paar Zeilen in JavaScript mit Razor. Ich dachte, der einfachste Weg wäre, zuerst den gesamten JavaScript-Block zusammenzusetzen und dann das ganze auszugeben. Das Problem ist, die einfachen Anführungszeichen werden als & # 39 gerendert.Ausgabe von einfachen Anführungszeichen in Razor generierte JavaScript-Zeichenfolge

Ist es möglich, die letzte Zeile zu ändern, dies richtig zu schreiben, zu erhalten:

var friendArray = new Array(); 
    @{ 
     int i = 0; 
     string jsString=""; 
     foreach(var friend in friends) 
     { 
      jsString = jsString + "friendArray["; 
      jsString = jsString + i.ToString(); 
      jsString = jsString + "]='"; 
      jsString = jsString + friend.displayname; 
      jsString = jsString + "';"; 
      i++; 
     } 
     @jsString; 
    } 

Die oben erzeugt dies:

friendArray[0]=& #39;Hollister& #39;;friendArray[1]=& #39;Festus& #39;; 

Antwort

27

Sie könnten die Codierung von HTML durch die Ausgabe auf diese Weise deaktivieren :

@Html.Raw(jsString) 
+1

Das funktioniert. Eigentlich habe ich es früher versucht, aber ich dachte nicht, dass ich das @ vorschreiben müsste, also schrieb nichts. Vielen Dank. – Dave

+1

@Dave: Ja, ohne es bist du in C# -Modus, also die @ erzwingt Rasierer/HTML-Modus so tatsächlich die Ergebnisse ausgibt. –

+3

Dies ist ein möglicher Weg für die Skript-Injektion, wenn dieser jString nicht vertrauenswürdig ist. Sei sehr vorsichtig. – Bon

Verwandte Themen