Форматирование строк в ASP.NET Razor

В настоящее время я пишу небольшую систему шаблонов в ASP.NET, чтобы позволить пользователям добавлять контент. Например, пользователь может ввести строку (тип переменной - строка).

topHeader[x] = "They think it's all over. It is now!";

Тем не менее, одно из необходимых изменений - это возможность добавить некоторые базовые теги HTML в этот контент, поэтому можно сделать следующее.

topHeader[x] = "They think it's all over. <strong>It is now!</strong>";

или же

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>";

Если вы добавляете такие вещи в строки сейчас, они не отформатированы как HTML, но я хочу как-то избежать их, чтобы они могли быть. Естественно, я искал ответ в Интернете, но, поскольку Razor довольно нов, там не так много, чтобы помочь мне.

У кого-нибудь есть идеи, как это сделать?

3 ответа

Решение

Вам нужно создать IHtmlStringреализация, содержащая ваш источник HTML.

Razor планирует иметь вспомогательный метод, чтобы сделать это для вас, но, AFAIK, этого еще нет, поэтому я считаю, что вам нужно создать свой собственный класс, который реализует интерфейс и возвращает ваш HTML изGetHtmlString()метод.
РЕДАКТИРОВАТЬ: Вы можете использовать HtmlString учебный класс.

Вы можете либо изменить свой topHeader словарь для хранения IHtmlStringс вместо Strings, или вы можете оставить свой код как есть, но оберните его в HtmlString в виде бритвы:

<tag>@new HtmlString(topHeader[x])</tag>

Убедитесь, что правильно экранированы любые не-HTML специальные символы.

Добавленный ими вспомогательный метод называется Html.Raw(), и он намного чище.

Вот пример:

@Html.Raw("Hello <a>World</a>!")

SLaks - это правильно, но вам не нужно писать свою собственную реализацию IHtmlStringесть один встроенный в System.Web называется HtmlString, Так:

topHeader[x] = new HtmlString("They think it's all over. <a title=\"Football News\" href=\"URL\">It is now!</a>");

Должен сделать свое дело.

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