Написання / виведення рядків HTML без націлювання


436

У мене збережений / оздоровлений HTML, збережений у таблиці БД.

Як я можу створити цей HTML-вміст у режимі перегляду Бритви?

Він завжди уникає таких персонажів, як <і до них &amp;.


76
Щоб врятувати людей довгу історію обговорень нижче -@Html.Raw()
Chris S

Щоб врятувати таких людей, як я, намагаються це зробити за допомогою анонімних типів у динамічно набраних видах, де це не вийде - дивіться цю відповідь на моє більш конкретне запитання. Хоча використовувати цей підхід із сильно набраним видом, все ж краще, якщо ваша ситуація дозволяє.
бричіни

Відповіді:


653

Припустимо, що ваш вміст знаходиться в рядку з назвою mystring...

Ви можете використовувати:

@Html.Raw(mystring)

Крім того, ви можете перетворити рядок у HtmlStringбудь-який інший тип, який реалізується IHtmlStringв моделі або безпосередньо вбудовано і використовувати регулярно @:

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString

Дякую за цю відповідь. Допоміг мені закінчити маленьке завдання, яке я вчився. :) Однак я використовую останню версію MVC3 і поки що не Html.Raw :(

1
Привіт Серхіо. Я використовую MVC 3, і я правильно використовую метод Raw.
Гі

1
Дякую за відповідь! Я все ще вивчаю MVC 3, і це мені було ухилятися.
Тодд Річардсон

3
@Lorenzo, +1 Я використовую останній MVC 3 із razorсинтаксисом і Html.Rawмені, безумовно, доступний.
Кріс Сноуден

1
Лоренцо, я оновив відповідь, щоб видалити згадування про MVC Beta, як це було кілька років тому. Ви можете повернути / змінити.
Олексій Левенков

75

У ASP.NET MVC 3 слід зробити щось подібне:

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

13
Я віддаю перевагу цьому методу, оскільки HTML.Raw вибухає, якщо передана рядок є нульовою.
37Зір

1
Дякую, це дуже чисто!
Хаджаят

64

Можна використовувати

@{ WriteLiteral("html string"); }

5
Це було для мене приголомшливо, використовуючи Razor у додатку Hangfire для надсилання електронних листів ... Html.Raw()там не працює
shanabus

1 для WriteLiteral
muhammed basil

11

Іноді використовувати складний html може бути складно. Переважно через вразливість XSS. Якщо це викликає занепокоєння, але ви все ще хочете використовувати сирий html, ви можете кодувати страшні частини.

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

Призводить до

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4

Ви можете помістити рядок у viewdata в контролері так:

 ViewData["string"] = DBstring;

А потім зателефонуйте до даних viewdata таким чином:

@Html.Raw(ViewData["string"].ToString())


0

Повний приклад використання функцій шаблону в RazorEngine (наприклад, для створення електронної пошти):

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

</body>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.