Désactiver L'encodage HTML dans Razor

j'ai une fonction qui renvoie un extrait de JavaScript et/ou HTML.

static public string SpeakEvil()
{
    return "<script>alert('BLAH!!');</script>";
}

dans la vue, Razor est à juste titre HTML l'encodant, comme la plupart s'y attendrait.

@StaticFunctions.SpeakEvil()

Comment puis-je avoir le rasoir HTML encodent ceci, de sorte que le HTML et le JavaScript sont émis mot à mot, et que n'importe quel script fonctionne réellement?

21
demandé sur p.campbell 2011-02-11 23:05:47

3 réponses

vous pourriez utiliser le Raw() fonction mais il est principalement destiné à des choses qui viennent de la base de données.

Pour une aide comme vous avez je suggère de retourner un IHtmlString:

static public IHtmlString SpeakEvil() {
    return new HtmlString("<script>alert('BLAH!!');</script>");
}

de cette façon vous n'avez pas à appeler Raw() à chaque site d'appel.

50
répondu marcind 2011-02-11 20:32:56

Html.Raw helper.

@Html.Raw(StaticFunctions.SpeakEvil())
37
répondu Oded 2011-02-11 20:07:30

Retour MvcHtmlString (Hérite de HtmlString) en appelant le MvcHtmlString.Create() méthode comme ceci:

public static MvcHtmlString SpeakEvil()
{
    return MvcHtmlString.Create("<script>alert('BLAH!!');</script>");
}



Vous pouvez aussi en faire une extension String:

public static MvcHtmlString HtmlSafe(this string content)
{
    return MvcHtmlString.Create(content);
}



Source:

http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx

4
répondu Nikkelmann 2012-03-21 11:14:32