Форматирование строк в 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
с вместо String
s, или вы можете оставить свой код как есть, но оберните его в 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>");
Должен сделать свое дело.