Это не совсем правильно. Да, вы можете вставить необработанную строку, но если она у вас есть, "'<>etc...она будет экранирована. Правильный способ - использовать MvcHtmlString, который разрешит «недопустимые» символы. Например, если вы кодируете данные Json ... без кодирования всей модели
Дэниел Б. Чепмен,
4
Daniel, Html.Raw () "возвращает разметку, не закодированную в формате HTML."
Это НЕ кодирует кавычки. Помимо очевидной документации, в которой говорится, что это просто день ( «Этот метод оборачивает разметку HTML с помощью класса IHtmlString, который отображает незашифрованный HTML.» ) Я также проверял это, и кавычки не кодируются.
Как и уже упоминавшийся подход @ Html.Raw (string), если вы выведите MvcHtmlString, он не будет закодирован. Это может быть полезно при добавлении собственных расширений в HtmlHelper или при возврате значения из вашей модели представления, которое, как вы знаете, может содержать html.
<!--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()с осторожностью, так как это может вызвать больше проблем с кодированием и безопасностью. Я понимаю вариант использования, так как я должен был сделать это сам, но осторожно ... Просто избегайте пропуска всего текста. Например, сохраняйте / конвертируйте только определенные последовательности символов и всегда кодируйте остальные:
Тогда вы будете уверены, что не создали потенциальную дыру в безопасности, и любые специальные / иностранные символы отображаются корректно во всех браузерах.
+1 Именно то, что мне было нужно! Строка все еще должна быть закодирована, но возвращаемая строка должна быть html. Спасибо!
Питер
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))для ASP.NET Core
кендзиуно
5
В случае ActionLink он обычно использует HttpUtility.Encode в тексте ссылки. В этом случае вы можете использовать
HttpUtility.HtmlDecode(myString)
его для меня, когда используете HtmlActionLink для декодирования строки, которую я хотел передать. например:
"'<>etc...
она будет экранирована. Правильный способ - использовать MvcHtmlString, который разрешит «недопустимые» символы. Например, если вы кодируете данные Json ... без кодирования всей модели"myAttr='hello';myInt=10"
источник
Как и уже упоминавшийся подход @ Html.Raw (string), если вы выведите MvcHtmlString, он не будет закодирован. Это может быть полезно при добавлении собственных расширений в HtmlHelper или при возврате значения из вашей модели представления, которое, как вы знаете, может содержать html.
Например, если ваша модель представления была:
Для Core 1.0+ (и MVC 5+) используйте HtmlString
затем
источник
Используйте
@Html.Raw()
с осторожностью, так как это может вызвать больше проблем с кодированием и безопасностью. Я понимаю вариант использования, так как я должен был сделать это сам, но осторожно ... Просто избегайте пропуска всего текста. Например, сохраняйте / конвертируйте только определенные последовательности символов и всегда кодируйте остальные:Тогда вы будете уверены, что не создали потенциальную дыру в безопасности, и любые специальные / иностранные символы отображаются корректно во всех браузерах.
источник
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
для ASP.NET CoreВ случае ActionLink он обычно использует HttpUtility.Encode в тексте ссылки. В этом случае вы можете использовать
HttpUtility.HtmlDecode(myString)
его для меня, когда используете HtmlActionLink для декодирования строки, которую я хотел передать. например:источник
Вы также можете использовать метод WriteLiteral
источник
HTML RAW:
источник