Как бы я сказал браузеру отображать строку, а не отображать ее?

У меня есть этот метод расширения, который я создал, и он возвращает строку всех категорий в моей базе данных в виде гиперссылок. Большой!

@Html.MyMenu()

Проблема в том, что ссылки отображаются как текст, а не как гиперссылки.

При просмотре исходного кода я вижу:

<div id="menucontainer">

                &lt;a href=&quot;/Anuncio/Electronics&quot;&gt;Electronics&lt;/a&gt;&lt;a href=&quot;/Anuncio/Clothes&quot;&gt;Clothes&lt;/a&gt;&lt;a href=&quot;/Anuncio/Domestic&quot;&gt;Domestic&lt;/a&gt;&lt;a href=&quot;/Anuncio/Garden&quot;&gt;Garden&lt;/a&gt;

            </div>

Я думаю, что могу ошибаться, но я помню, что в MVC2 (с использованием механизма представления по умолчанию) у вас было:

<%: this is rendered, right? %>

Или я ошибаюсь? В любом случае, я использую MVC3 и движок Razor. Большое спасибо за вашу помощь, ребята. Мне действительно нравится узнавать как можно больше об этом.

4 ответа

Решение

Razor по умолчанию экранирует HTML.

Чтобы избежать этого, пожалуйста, сделайте что-то вроде этого:

Запись / вывод HTML-строк без экранирования

В RC2 к этому должен быть добавлен новый метод @HTml.Raw.

Или вы можете изменить MyMenu, чтобы он возвращал HtmlString или MvcString, а не просто строку.

RC2 поддерживает @Html.Raw() для вывода необработанного HTML

Из объявления RC2 Скотта Гатри

В RC2 мы добавляем вспомогательный метод Html.Raw (), который можно использовать, чтобы явно указать, что вы не хотите, чтобы HTML-кодировал ваш вывод, и вместо этого хотите визуализировать содержимое "как есть".

Хорошо ваш метод расширения должен возвращать MvcHtmlString для того, чтобы правильно отображаться на вашей странице, используя <%: %> Если он возвращает строку, все угловые скобки и другие специальные символы html будут закодированы в формате html.

Другие вопросы по тегам