Відображення закодованого html за допомогою бритви


79

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

Єдиний спосіб, який я міг правильно відобразити, це:

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

Це негарно. Чи є кращий спосіб це зробити?

Відповіді:


154

Спробуйте це:

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

Дякую! Це краще, але все-таки не те, що я шукаю.
січень

8
У підсумку я зробив метод розширення відповідно до цієї ідеї. @ Html.RawDecode (Model.Content)
січень

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, перш ніж зберегти його в базі даних. Таким чином, він буде відображати введений користувачем вміст без будь-якої перевірки "безпеки". Тому я думаю, що це не найкраще рішення.
січень

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.