Ответ 1
Измените Description
proerpty, чтобы вернуть HtmlString
.
Бритва не выходит за пределы значений HtmlString
.
(Фактически, все Html.Raw
действительно создает HtmlString
)
Ive получил класс со свойством, которое выглядит так:
[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
Ive уже включил атрибут [AllowHtml]
, чтобы позволить мне отправить HTML в это свойство через форму, которую Ive построил, но я хочу, чтобы вывести значение свойства как необработанный HTML без его экранирования.
Я знаю, что могу использовать Html.Raw(Model.Description)
, но то, что я ищу, - это способ сказать Html.DisplayFor(m => m.Description)
всегда выводить необработанный HTML. Есть ли атрибут, который я могу использовать, чтобы украсить свойства в моем классе, которые я хочу вести себя так?
В основном его ленивый - я не хочу вспоминать, какие свойства могут содержать HTML, поэтому я не хочу думать об использовании Html.Raw(…)
, когда мне нужно сделать вышеприведенный идентификатор, а скорее моя модель знает, что он должен делать это и делать это автоматически. Ive попытался найти ответ, но либо Im не формулировал его правильно, либо не сделал этого: (
Спасибо,
Измените Description
proerpty, чтобы вернуть HtmlString
.
Бритва не выходит за пределы значений HtmlString
.
(Фактически, все Html.Raw
действительно создает HtmlString
)
Это на самом деле довольно просто (как только вы знаете, как...). Измените свой DataType на [DataType(DataType.Html)]
и создайте частичный вид, поместите его в Views/Shared/DisplayTemplates/Html.cshtml
, с помощью этого:
@model string
@Html.Raw(Model)
Конечно, вы также не можете изменить атрибут DataType и назовите представление MultilineText.cshtml
вместо Html.cshtml
.
Просто для получения дополнительной информации здесь - ваша проблема в том, что @всегда будет HtmlEncode, если у вас нет возврата к IHtmlString, поэтому проблема связана с символом @. Это одно из преимуществ синтаксиса бритвы - это безопаснее для htmlencode, чем нет. Таким образом, здесь нет "быстрого" способа, так как корень вашей проблемы является символом @, который исключает HtmlEncoding, если он найдет IHtmlString. Итак - нет "быстрого" способа обойти это, если вы не используете старый <% синтаксис, который ИМХО сосет по сравнению с бритвой:)