ASP.NET MVC Razor визуализировать без кодирования

211

Razor кодирует строку по умолчанию. Есть ли специальный синтаксис для рендеринга без кодирования?

Теги:
razor
asp.net-mvc

7 ответов

309
Лучший ответ

С ASP.NET MVC 3 вы можете использовать:

@Html.Raw(myString)
  • 7
    Это не совсем правильно. Да, вы можете вставить необработанную строку, но если у вас есть "'<>etc... они будут экранированы. Правильный способ - использовать MvcHtmlString, который будет разрешать" недопустимые "символы. Например, если вы кодируете Json данные ... без кодирования всей модели
  • 4
    Daniel, Html.Raw () "возвращает разметку, не закодированную в формате HTML."
Показать ещё 2 комментария
53
@(new HtmlString(myString))
  • 3
    Спасибо! Это работает в MVC2, в котором не было Html.Raw ()!
27

Как и уже упомянутый подход @Html.Raw(string), если вы выведете MvcHtmlString, он не будет закодирован. Это может быть полезно при добавлении собственных расширений в HtmlHelper или при возврате значения из вашей модели представления, которое, как вы знаете, может содержать html.

Например, если ваша модель просмотра была:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

затем

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
8

Используйте @Html.Raw() с осторожностью, поскольку это может вызвать дополнительные проблемы с кодировкой и безопасностью. Я понимаю вариант использования, поскольку я должен был сделать это сам, но осторожно... Просто избегайте пропускания всего текста. Например, только сохранение/преобразование определенных последовательностей символов и всегда кодирование остальных:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

Тогда у вас есть душевное спокойствие, что вы не создали потенциальную дыру в безопасности, и любые специальные/чужие символы отображаются правильно во всех браузерах.

  • 0
    +1 Именно то, что мне было нужно! Строка все еще должна быть закодирована, но возвращаемая строка должна быть html. Спасибо!
  • 0
    @Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>")) для ASP.NET Core
4

В случае ActionLink он обычно использует HttpUtility.Encode в тексте ссылки. В таком случае вы можете использовать HttpUtility.HtmlDecode(myString) он работал у меня при использовании HtmlActionLink для декодирования строки, которую я хотел передать. например:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
  • 0
    да, это помогло мне
1

Вы также можете использовать метод WriteLiteral

0

HTML RAW: @Html.Raw(yourString)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню