2013-06-14 7 views
7

Ich sende ein Modell an eine Ansicht, die Zeichenfolgen haben. Diese Strings sind HTML-codiert und ich brauche sie nicht. Gibt es eine Möglichkeit, ein Modell ohne HTML-Codierung an eine Ansicht zu senden?So erhalten Sie MVC-Modell-Strings als Klartext in Ansichten

Modell:

public class Package 
{ 
    public string String { get; set; } 
} 

Controller:

public ActionResult GetPackage() 
{ 
    Package oPackage = new Package(); 
    oPackage.String = "using lots of \" and ' in this string"; 
    return View(oPackage); 
} 

Ausblick:

@model Models.Package 
<script type="text/javascript"> 
    (function() { 
     // Here @Model.String has lots of &#39; and &quot; 
     var String = "@Model.String".replace(/&#39;/g, "'").replace(/&quot;/g, "\""); 
     // Here String looks ok because I run the two replace functions. But it is possible to just get the string clean into the view? 
    })(); 
</script> 

die Funktionen ersetzen Laufen ist eine Lösung, aber nur ohne die Codierung der Zeichenfolge bekommen wäre toll .

Antwort

11
@Html.Raw(yourString) 

sollte diese Arbeit:

@model Models.Package 
<script type="text/javascript"> 
    (function() { 
     var String = "@Html.Raw(Model.String)"; 
})(); 
</script> 
+0

Diese zu entfernen, die HTML-Codierung ist die richtige Antwort. Allerdings zeigt sich das Problem, da es jetzt zu viele "im Klartext gibt. Und das schraubt das Einschließen des Textes nach innen". Zurück zum HTML-kodierten Text und .replace(). – Espen

+1

Weil die Antwort was entfernt Frage fragt nach "die Zeichenfolge ohne die Codierung zu bekommen" Ich finde dies die genaueste Antwort. – Termato

3

Wie ich denke, das als meine Antwort anders, ich bin hier ein anderes setzen. System.Web.HttpUtility.JavaScriptStringEncode(Model.String, true);

@model Models.Package 
<script type="text/javascript"> 
    (function() { 
     var String = "@System.Web.HttpUtility.JavaScriptStringEncode(Model.String, true)"; 
})(); 
</script> 

this helps .. :)

4

Zunächst müssen Sie die Zeichenfolge Javascript format konvertieren.
Dann müssen Sie verhindern, dass MVC es als HTML neu codiert (weil es Javascript, nicht HTML).

der Code, den Sie also brauchen, ist:

@using System.Web 

@model Models.Package 

<script type="text/javascript"> 
    var s = "@Html.Raw(HttpUtility.JavaScriptStringEncode(Model.AnyString, addDoubleQuotes: false))"; 
</script>