2013-06-14 1 views
7

J'envoie un modèle à une vue qui a des chaînes. Ces chaînes sont encodées en HTML et je n'en ai pas besoin. Un moyen d'envoyer un modèle à une vue sans encodage html?Comment faire pour obtenir des chaînes de modèle MVC en texte brut dans les vues

Modèle:

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); 
} 

Vue:

@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> 

Exécution Les fonctions de remplacement est une solution, mais juste obtenir la chaîne sans l'encodage serait génial .

Répondre

11
@Html.Raw(yourString) 

Cela devrait fonctionner:

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

C'est la bonne réponse à la suppression du codage html. Cependant, le problème se manifeste car il y en a trop maintenant "dans le texte brut, et cela engloutit l'enfermement du texte à l'intérieur de" ". Retour au texte codé html et .replace() – Espen

+1

Parce que la réponse supprime ce que le question demande "obtenir la chaîne sans l'encodage" Je trouve que c'est la réponse la plus précise. – Termato

3

Comme je pense que cela est différent de ma réponse précédente, je suis en train ici un autre. 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> 

Hope this helps .. :)

4

Premièrement, vous devez convertir la chaîne en Javascript format.
Ensuite, vous devez empêcher MVC de le ré-encoder en HTML (parce que son Javascript, pas HTML).

Ainsi, le code dont vous avez besoin est:

@using System.Web 

@model Models.Package 

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