У мене збережений / оздоровлений HTML, збережений у таблиці БД.
Як я можу створити цей HTML-вміст у режимі перегляду Бритви?
Він завжди уникає таких персонажів, як <
і до них &
.
У мене збережений / оздоровлений HTML, збережений у таблиці БД.
Як я можу створити цей HTML-вміст у режимі перегляду Бритви?
Він завжди уникає таких персонажів, як <
і до них &
.
Відповіді:
Припустимо, що ваш вміст знаходиться в рядку з назвою mystring
...
Ви можете використовувати:
@Html.Raw(mystring)
Крім того, ви можете перетворити рядок у HtmlString
будь-який інший тип, який реалізується IHtmlString
в моделі або безпосередньо вбудовано і використовувати регулярно @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
razor
синтаксисом і Html.Raw
мені, безумовно, доступний.
У 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)
Можна використовувати
@{ WriteLiteral("html string"); }
Html.Raw()
там не працює
Іноді використовувати складний html може бути складно. Переважно через вразливість XSS. Якщо це викликає занепокоєння, але ви все ще хочете використовувати сирий html, ви можете кодувати страшні частини.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Призводить до
(<b><script>console.log('insert')</script>Hello</b>)
Крім використання, @MvcHtmlString.Create(ViewBag.Stuff)
як пропонував Доммер, я пропоную вам також використовувати бібліотеку AntiXSS як запропоновану шпаклівку http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx
Він кодує майже всю можливу рядок атаки XSS.
Повний приклад використання функцій шаблону в 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>
@Html.Raw()