Razor кодирует строку по умолчанию. Есть ли специальный синтаксис для рендеринга без кодирования?
С ASP.NET MVC 3 вы можете использовать:
@Html.Raw(myString)
@(new HtmlString(myString))
Как и уже упомянутый подход @Html.Raw(string), если вы выведете MvcHtmlString, он не будет закодирован. Это может быть полезно при добавлении собственных расширений в HtmlHelper или при возврате значения из вашей модели представления, которое, как вы знаете, может содержать html.
Например, если ваша модель просмотра была:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString 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>
Используйте @Html.Raw()
с осторожностью, поскольку это может вызвать дополнительные проблемы с кодировкой и безопасностью. Я понимаю вариант использования, поскольку я должен был сделать это сам, но осторожно... Просто избегайте пропускания всего текста. Например, только сохранение/преобразование определенных последовательностей символов и всегда кодирование остальных:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
Тогда у вас есть душевное спокойствие, что вы не создали потенциальную дыру в безопасности, и любые специальные/чужие символы отображаются правильно во всех браузерах.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
для ASP.NET Core
В случае ActionLink он обычно использует HttpUtility.Encode в тексте ссылки.
В таком случае
вы можете использовать
HttpUtility.HtmlDecode(myString)
он работал у меня при использовании HtmlActionLink для декодирования строки, которую я хотел передать. например:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
Вы также можете использовать метод WriteLiteral
HTML RAW: @Html.Raw(yourString)
"'<>etc...
они будут экранированы. Правильный способ - использовать MvcHtmlString, который будет разрешать" недопустимые "символы. Например, если вы кодируете Json данные ... без кодирования всей модели