Всегда выводить необработанный HTML, используя MVC3 и Razor - PullRequest
16 голосов
/ 02 июня 2011

У меня есть класс со свойством, которое выглядит следующим образом:

[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description { get; set; }

Я уже вставил атрибут [AllowHtml], чтобы я мог отправить HTML-код этому свойству через форму, которую явстроено, но я хочу вывести значение свойства в виде необработанного HTML без экранирования.

Я знаю, что могу использовать Html.Raw(Model.Description), но то, что я ищу, это какой-то способсказать Html.DisplayFor(m => m.Description) всегда выводить необработанный HTML.Есть ли атрибут, который я могу использовать, чтобы украсить свойства в моем классе, которые я хотел бы вести себя так?

По сути, я ленивый - я не хочу вспоминать, какие свойства могут содержать HTML, поэтомуЯ не хочу думать о том, чтобы использовать Html.Raw(…), когда мне нужно сделать вышеуказанное - я бы предпочел, чтобы моя Модель знала, что она должна делать, и делала это автоматически.Я пытался найти ответ, но либо неправильно формулирую его, либо нет способа сделать это: (

Спасибо,

Ответы [ 3 ]

21 голосов
/ 02 июня 2011

Измените свой Description proerpty, чтобы получить HtmlString.

Razor не экранирует HtmlString значений.
(На самом деле, все Html.Raw создает HtmlString)

5 голосов
/ 09 апреля 2012

Это на самом деле довольно просто (если вы знаете, как ...).Измените свой атрибут DataType на [DataType(DataType.Html)] и создайте частичное представление, поместите его в Views/Shared/DisplayTemplates/Html.cshtml, с помощью этого:

@model string
@Html.Raw(Model)

Конечно, вы также не можете изменить свой атрибут DataType и назовите представление MultilineText.cshtml вместо Html.cshtml.

2 голосов
/ 02 июня 2011

Просто, чтобы предоставить здесь немного больше информации - ваша проблема в том, что @ всегда будет HtmlEncode, если только вы не вернули IHtmlString - поэтому проблема возникла в символе @. Это одно из преимуществ синтаксиса бритвы - он безопаснее для htmlencode, чем нет. Поэтому здесь нет «быстрого» пути, поскольку корень вашей проблемы - символ @, который исключит HtmlEncoding, если найдет IHtmlString. Так что - нет быстрого способа обойти это, если только вы не используете старый синтаксис <%, который IMHO отстой по сравнению с бритвой:) </p>

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