Razor кодирует строку по умолчанию. Есть ли специальный синтаксис для рендеринга без кодирования?
ASP.NET MVC 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