Отображение закодированного HTML с помощью бритвы


79

Я храню закодированный HTML в базе данных.

Единственный способ правильно отобразить это:

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

Это ужасно. Есть ли лучший способ сделать это?

Ответы:


154

Попробуй это:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>

Благодаря! Это лучше, но все же не то, что я искал.
jani

8
В итоге я создал метод расширения в соответствии с этой идеей. @ Html.RawDecode (Model.Content)
jani

3
Просто избегайте; в конце
Джованни Фарто М.

Это работает, но это так грязно ... закончилось тем, что с этим завернутым был создан метод расширения, может ли кто-нибудь объяснить, почему .Raw просто не работает?
Egli Becerra

48

Используйте Html.Raw(). Фил Хаак опубликовал хорошее руководство по синтаксису на http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx .

<div class='content'>
    @Html.Raw( Model.Content )
</div>

1
Благодарю за ответ. Но я думаю, что Html.Raw () - это «отображение как есть, а не кодирование». Поэтому, если я использую это, я не могу декодировать свой html, прежде чем сохраню его в базе данных. Таким образом, он будет отображать введенный пользователем контент без какой-либо проверки «безопасности». Так что я считаю, что это не лучшее решение.
jani

9

это довольно просто:

HttpUtility.HtmlDecode(Model.Content)

Другое решение, вы также можете вернуть HTMLString, Razor выведет правильное форматирование:

в самом представлении:

@Html.GetSomeHtml()

в контроллере:

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}

8

Вы также можете просто использовать HtmlStringкласс

    @(new HtmlString(Model.Content))

0

Я храню закодированный HTML в базе данных.

Имхо, вы не должны хранить свои данные в html-кодировке в базе данных. Просто сохраните в виде обычного текста (не закодированного) и просто отобразите ваши данные вот так, и ваш html будет автоматически закодирован:

<div class='content'>
    @Model.Content
</div>

0

У меня есть еще один случай отображения обратной косой черты \с помощью Razor и Java Script.

Мой @Model.AreaNameвыглядит как Name1 \ Name2 \ Name3, поэтому, когда я показываю его, все обратные косые черты исчезают, и я вижу Name1Name2Name3

Я нашел решение, чтобы исправить это:

var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");

Не забудьте добавить @using Newtonsoft.Jsonвверху chtmlстраницы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.