Search code examples
asp.net-mvcrazorhtml-encode

Turn off HTML Encoding in Razor


I have a function that returns a snippet of JavaScript and/or HTML.

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

In the view, Razor is quite rightly HTML encoding it, as most would expect.

@StaticFunctions.SpeakEvil()

How do I have Razor not HTML Encode this, so that the HTML and JavaScript are emitted verbatim, and that any script actually runs?


Solution

  • You could use the Raw() function but it's mostly meant for things that come from the database.

    For a helper like you have I would suggest returning an IHtmlString:

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

    That way you don't have have to call Raw() at every callsite.