2010-07-27 3 views
9

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

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 довольно новичок, там не так много, чтобы помочь мне.

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

ответ

9

Вам необходимо создать реализацию IHtmlString с вашим источником HTML.

Razor планирует использовать вспомогательный метод для этого, но AFAIK его еще нет, поэтому я считаю, что вам нужно создать свой собственный класс, который реализует интерфейс и возвращает ваш HTML-код из GetHtmlString() способ.
EDIT: Вы можете использовать класс HtmlString.

Вы можете либо изменить topHeader словарь, чтобы держать IHtmlString с вместо String с, или вы можете оставить свой код, как есть, но обернуть его в HtmlString в представлении Razor:

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

Убедитесь в том, правильно избегайте любых специальных символов, отличных от HTML.

4

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>"); 

Должен сделать трюк.

+0

Я попытался это, но получить «CS0029: Не удается неявно преобразовать тип„System.Web.HtmlString“в„строка“» Любая идея о том, что я делаю неправильно? –

+1

@EnderMB: изменить словарь, чтобы содержать 'IHtmlString' или' object'. – SLaks

9

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

Вот пример:

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

Это работало как шарм! И это проще, чем другие ответы. – sksallaj

Смежные вопросы