Ответ 1
Это мой любимый подход:
@Html.Raw("<p>my paragraph text</p>")
Источник был ссылкой на синтаксис Фила Хаака Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
Как сообщает ScottGu в своем блоге post "по умолчанию контент, испускаемый с помощью блока @, автоматически кодируется HTML для лучшей защиты от сценариев атаки XSS", Мой вопрос: как вы можете выводить строку, не связанную с HTML?
Для простоты pls придерживаются этого простого случая:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
Это мой любимый подход:
@Html.Raw("<p>my paragraph text</p>")
Источник был ссылкой на синтаксис Фила Хаака Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
Вы можете создать новый экземпляр MvcHtmlString, который не получит кодировку HTML.
@{
var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}
Надеюсь, в будущем Razor станет более простым способом.
Если вы не используете MVC, вы можете попробовать следующее:
@{
var html = new HtmlString("<a href='#'>Click me</a>")
}
Новый HtmlString определенно является ответом.
Мы рассмотрели некоторые другие синтаксические изменения бритвы, но в конечном итоге ни один из них не оказался на самом деле короче, чем новый HtmlString.
Мы можем, однако, обернуть это в помощника. Возможно...
@Html.Literal("<p>something</p>")
или
@"<p>something</p>".AsHtml()
Я столкнулся с этой проблемой и при переходе нашего проекта на новый механизм просмотра Razor. Подход, который я принял, немного отличался, потому что нам приходилось генерировать данные JSON из С# и хотеть выводить его при загрузке страницы.
В итоге я реализовал RawView, который был параллелен View внутри файлов cshtml. По существу, чтобы получить необработанную строку,
@(new HtmlString(View.Foo))
// became
@RawView.Foo
Для этого требуется несколько изменений в макете проекта, поэтому я просто написал сообщение в блоге об этом здесь. Короче говоря, для этого потребовалась дублированная реализация MVC DynamicViewDataDictionary и нового WebViewPage, который содержит RawView. Я также пошел вперед и реализовал оператор индекса в RawView, чтобы разрешить
@RawView["Foo"]
В случайном случае кому-то нужно перебирать данные со списком ключей.
Чтение комментария медсестры, вероятно, было бы лучше, если бы я назвал это как Literal вместо RawView.
Я использую ASP.NET MVC и Razor под Mono.
Я не смог получить HtmlHelper из System.Web.WebPages из System.Web.Mvc по некоторым причинам.
Но мне удалось вывести некодированную строку после объявления свойства модели как RazorEngine.Text.RawString
. Теперь он выводит как ожидалось.
пример
@{
var txt = new RawString("some text with \"quotes\"");
var txt2 = "some text with \"quotes\"";
}
<div>Here is unencoded text: @txt</div>
<div>Here is encoded text: @txt2</div>
Выход:
<div>Here is unencoded text: some text with "quotes"</div>
<div>Here is encoded text: some text with "quotes"</div>