Razor encodes string by default. Is there any special syntax for rendering without encoding?

share|improve this question
up vote 305 down vote accepted

Since ASP.NET MVC 3, you can use:

@Html.Raw(myString)
share|improve this answer
6  
This is not entirely correct. Yes, you can insert a raw string but if you have "'<>etc... these will be escaped. The correct way is to use the MvcHtmlString which will allow "illegal" characters. For instance, if you're encoding Json data... without encoding an entire model – Daniel B. Chapman Jun 28 '13 at 21:34
3  
Daniel, Html.Raw() "returns markup that is not HTML encoded." – Lucas Jul 1 '13 at 14:13
1  
Html.Raw() encodes the quotes... "myAttr='hello';myInt=10" – Serge Nov 27 '15 at 8:39
@(new HtmlString(myString))
share|improve this answer
3  
Thanks! This works in MVC2, which didn't have Html.Raw()! – Jeff Mar 14 '14 at 14:56

As well as the already mentioned @Html.Raw(string) approach, if you output an MvcHtmlString it will not be encoded. This can be useful when adding your own extensions to the HtmlHelper, or when returning a value from your view model that you know may contain html.

For example, if your view model was:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

then

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
share|improve this answer

Use @Html.Raw() with caution as you may cause more trouble with encoding and security. I understand the use case as I had to do this myself, but carefully... Just avoid allowing all text through. For example only preserve/convert specific character sequences and always encode the rest:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

Then you have peace of mind that you haven't created a potential security hole and any special/foreign characters are displayed correctly in all browsers.

share|improve this answer
    
+1 Exactly what I needed! The string still needs to be encoded but the line returns need to be html. Thanks! – Peter Mar 14 '16 at 19:41

You can also use the WriteLiteral method

share|improve this answer

In case of ActionLink, it generally uses HttpUtility.Encode on the link text. In that case you can use HttpUtility.HtmlDecode(myString) it worked for me when using HtmlActionLink to decode the string that I wanted to pass. eg:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)

share|improve this answer
    
yea that did the trick for me wow – skates008 Feb 28 at 11:06

HTML RAW : @Html.Raw(yourString)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.