ASP.NET MVC Razor визуализировать без кодирования - PullRequest
239 голосов
/ 01 ноября 2010

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

Ответы [ 7 ]

359 голосов
/ 21 декабря 2010

Начиная с ASP.NET MVC 3, вы можете использовать:

@Html.Raw(myString)
55 голосов
/ 01 ноября 2010
@(new HtmlString(myString))
30 голосов
/ 29 июня 2011

Так же, как уже упоминавшийся подход @ 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>
10 голосов
/ 07 апреля 2015

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

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

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

5 голосов
/ 09 февраля 2017

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

<code>  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
1 голос
/ 21 апреля 2016

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

0 голосов
/ 04 ноября 2016

HTML RAW:

@Html.Raw(yourString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...