Как говорит ScottGu в своем блоге пост «по содержанию по умолчанию , излучаемого с помощью @ блок автоматически HTML закодированный , чтобы лучше защитить от сценариев атак XSS». У меня вопрос: как вывести строку, не закодированную в HTML?
Для простоты, пожалуйста, придерживайтесь этого простого случая:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
asp.net
razor
html-encode
Hemme
источник
источник
new HtmlString()
в MVC 3, поскольку этот тип - .NET 4.new HtmlString - определенно ответ.
Мы рассмотрели некоторые другие изменения синтаксиса бритвы, но в конечном итоге ни одно из них не оказалось короче нового HtmlString.
Однако мы можем превратить это в помощника. Возможно ...
@Html.Literal("<p>something</p>")
или же
@"<p>something</p>".AsHtml()
источник
Я столкнулся с этой проблемой также при переходе нашего проекта на новый механизм просмотра Razor. Подход, который я использовал, немного отличался, потому что мы должны были генерировать данные JSON из C # и хотели выводить их при загрузке страницы.
В конечном итоге я реализовал 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>
источник