2011-01-25 12 views
41

Mam tabelę w mojej db, gdzie jedną z właściwości jest strona HTML (bez tagów HTML, head i body) i zamierzam umieścić ją w środku jednego z moich widoków - powiedzmy, nazywam cotroller metoda, która pobiera argument i zwraca widok przekazujący ten duży ciąg html jako model. Szukałem dla niego (nie dużo, muszę przyznać), i okazało się następującą metodę:Czy jest możliwe wyświetlanie surowego HTML z bazy danych w ASP.NET MVC 3?

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %> 

który został znaleziony here in stackoverflow. Kiedy próbowałem podobnego Aproach brzytwa, skończyło się z tym:

@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>") 

Taki jest pomysł, ale nie działał tak, jak planowałem.

+0

Co 'yourEncodedHtmlFromYouDatabase' wyglądać? Zgaduję, że kod HTML '

Test

' byłby faktycznie zakodowany mniej więcej tak: '& lt: h1 > Test & lt:/h1 >'. –

+0

Właściwie byłoby bardziej jak używanie tagów. Nie mam jeszcze gotowej bazy danych, ale to właśnie zamierzamy zrobić, więc szukam opcji. –

+0

To pytanie dla MVC2: http://stackoverflow.com/questions/2169805/mvc2-is-there-an-html-helper-for-raw-html –

Odpowiedz

77

Wszystko czego potrzebujesz to: @Html.Raw(yourEncodedHtmlFromYouDatabase)

jestem przy założeniu, że html w bazie danych zostało prawidłowo oczyszczone (lub przynajmniej z wiarygodnego źródła), bo jeśli nie, można zostać otwierasz się na krzyż ataki skryptów witryny.

Powodem, dla którego Twoje podejście nie zadziałało, jest to, że Razor generuje kodowanie HTML domyślnie (za każdym razem gdy używasz @ do wyświetlenia czegoś). Html.Raw mówi Razorowi, że ufasz HTML i chcesz go wyświetlić bez kodowania go (ponieważ jest to już surowy HTML).

+1

Dziękuję bardzo. Jeśli chodzi o bezpieczeństwo, to uważam, że nie ma takiego problemu, ponieważ sami będziemy budować ten html. –

+0

Cieszę się, że mogę pomóc. :) –

10

Możesz również zwrócić HTMLString i Razor wyprowadza poprawne formatowanie, na przykład.

@Html.GetSomeHtml() 

public static HtmlString GetSomeHtml() 
{ 
    var Data = "abc<br/>123"; 
    return new HtmlString(Data); 
} 

To pozwoli na wyświetlanie HTML

Powiązane problemy