2010-07-27 15 views
9

Obecnie piszę mały system szablonów w środowisku ASP.NET, aby umożliwić użytkownikom dodawanie treści. Na przykład użytkownik może wprowadzić ciąg znaków (zmiennym typem jest ciąg).Formatowanie ciągów w programie ASP.NET Razor

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

Jednak jedna zmiana, co potrzebne jest możliwość dodać kilka podstawowych znaczników HTML w tym treści, więc następujące można zrobić

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

lub

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

Jeśli dodać takie rzeczy w łańcuchy teraz nie są sformatowane jako HTML, ale chcę jakoś uciec od nich, aby mogły być. Naturalnie szukałem odpowiedzi w Internecie, ale ponieważ Razor jest całkiem nowy, nie ma zbyt wiele, aby mi pomóc.

Ktoś ma pomysł, jak to zrobić?

Odpowiedz

9

Musisz utworzyć implementację IHtmlString przechowującą źródło HTML.

Razor planuje mieć metodę pomocnika, aby to zrobić dla ciebie, ale AFAIK, jeszcze nie, więc uważam, że będziesz musiał stworzyć własną klasę, która implementuje interfejs i zwraca HTML z Metoda GetHtmlString().
EDYCJA: Można użyć klasy HtmlString.

Można albo zmienić słownik topHeader trzymać IHtmlString S zamiast String S lub można zostawić swój kod, jak jest, ale owinąć go w HtmlString w widoku Razor:

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

upewnij się, poprawnie unikaj znaków specjalnych innych niż HTML.

4

SLaks ma rację, ale nie trzeba pisać własne realizację IHtmlString, tam jeden wbudowany w System.Web zwanego HtmlString. Więc:

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

powinno załatwić sprawę.

+0

Próbowałem tego, ale odbierać „CS0029: Nie można niejawnie przekonwertować typu«System.Web.HtmlString»do«string»” Każdy pomysł na to, co robię źle? –

+1

@ EnderMB: Zmień słownik, aby zawierał 'IHtmlString' lub' object'. – SLaks

9

Dodana przez nich metoda pomocnicza nazywa się Html.Raw() i jest znacznie czystsza.

Oto przykład:

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

To działało jak czar! I jest to łatwiejsze niż inne udzielone odpowiedzi. – sksallaj

Powiązane problemy