ASP.NET MVC Razor без кодирования

Razor кодирует строку по умолчанию. Есть ли специальный синтаксис для рендеринга без кодирования?

Ответ 1

С ASP.NET MVC 3 вы можете использовать:

@Html.Raw(myString)

Ответ 2

@(new HtmlString(myString))

Ответ 3

Как и уже упоминавшийся подход @Html.Raw(string), если вы выведите MvcHtmlString, он не будет закодирован. Это может быть полезно при добавлении собственных расширений в HtmlHelper или при возврате значения из вашей модели представления, которое, как вы знаете, может содержать html.

Например, если ваша модель представления была:

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

Для Core 1. 0+ (и MVC 5+) используйте HtmlString

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

затем

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

Ответ 4

Используйте @Html.Raw() с осторожностью, поскольку это может вызвать дополнительные проблемы с кодировкой и безопасностью. Я понимаю вариант использования, поскольку я должен был сделать это сам, но осторожно... Просто избегайте пропускания всего текста. Например, только сохранение/преобразование определенных последовательностей символов и всегда кодирование остальных:

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

Тогда у вас есть душевное спокойствие, что вы не создали потенциальную дыру в безопасности, и любые специальные/чужие символы отображаются правильно во всех браузерах.

Ответ 5

В случае ActionLink он обычно использует HttpUtility.Encode в тексте ссылки. В таком случае вы можете использовать HttpUtility.HtmlDecode(myString) он работал у меня при использовании HtmlActionLink для декодирования строки, которую я хотел передать. например:

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

Ответ 6

Вы также можете использовать метод WriteLiteral

Ответ 7

HTML RAW:

@Html.Raw(yourString)

Ответ 8

use @Html.Raw("\" http://www.helloworld.com/?year=201x\"") отлично работает для экранирования значений пути /URL-адреса с помощью .Raw