ASP.NET MVC Razor render without encoding

C#.Netasp.netasp.net MvcRazor

C# Problem Overview


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

C# Solutions


Solution 1 - C#

Since ASP.NET MVC 3, you can use:

@Html.Raw(myString)

Solution 2 - C#

@(new HtmlString(myString))

Solution 3 - C#

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

For Core 1.0+ (and MVC 5+) use HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString 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>

Solution 4 - C#

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.

Solution 5 - C#

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",..)

Solution 6 - C#

You can also use the WriteLiteral method

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSiberianGuyView Question on Stackoverflow
Solution 1 - C#LucasView Answer on Stackoverflow
Solution 2 - C#Matthew VinesView Answer on Stackoverflow
Solution 3 - C#Jonathan MoffattView Answer on Stackoverflow
Solution 4 - C#Tony WallView Answer on Stackoverflow
Solution 5 - C#gutsy_guyView Answer on Stackoverflow
Solution 6 - C#Hamid ShahidView Answer on Stackoverflow