Wyświetl zakodowany html z brzytwą

79

Przechowuję zakodowany HTML w bazie danych.

Jedyny sposób, w jaki mogłem go poprawnie wyświetlić, to:

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

Jest brzydki. Czy jest lepszy sposób, aby to zrobić?

jani
źródło

Odpowiedzi:

154

Spróbuj tego:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>
Amitabh
źródło
Dzięki! To jest lepsze, ale nadal nie to, czego szukam.
jani
8
Skończyło się na stworzeniu metody rozszerzenia zgodnie z tym pomysłem. @ Html.RawDecode (Model.Content)
jani
3
Po prostu unikaj; w końcu
Giovanny Farto M.
To działa, ale jest tak brudne ... skończyło się na utworzeniu metody Extention z tym opakowaniem, czy ktoś może wyjaśnić, dlaczego .Raw po prostu nie działa?
Egli Becerra
48

Użyj Html.Raw(). Phil Haack opublikował niezły przewodnik po składni pod adresem http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx .

<div class='content'>
    @Html.Raw( Model.Content )
</div>
tvanfosson
źródło
1
Dziękuję za odpowiedź. Ale myślę, że Html.Raw () to „wyświetlaj tak, jak jest, nie koduj”. Więc jeśli tego użyję, nie mogę zdekodować mojego kodu HTML przed zapisaniem go w bazie danych. Więc wyświetli zawartość wprowadzoną przez użytkownika bez żadnej kontroli „bezpieczeństwa”. Więc myślę, że to nie jest najlepsze rozwiązanie.
jani
9

to jest całkiem proste:

HttpUtility.HtmlDecode(Model.Content)

Inne rozwiązanie, możesz również zwrócić ciąg HTMLString, Razor wyświetli prawidłowe formatowanie:

w samym widoku:

@Html.GetSomeHtml()

w kontrolerze:

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}
Muhammad Soliman
źródło
8

Możesz także po prostu użyć HtmlStringklasy

    @(new HtmlString(Model.Content))
Bellash
źródło
0

Przechowuję zakodowany HTML w bazie danych.

Imho, nie powinieneś przechowywać danych w bazie danych zakodowanych w formacie HTML. Po prostu przechowuj jako zwykły tekst (nie zakodowany) i wyświetlaj swoje dane w ten sposób, a Twój kod HTML zostanie automatycznie zakodowany:

<div class='content'>
    @Model.Content
</div>
Mcanic
źródło
0

Właśnie dostałem kolejny przypadek do wyświetlenia odwrotnego ukośnika \z Razor i Java Script.

Mój @Model.AreaNamewygląd wygląda jak Imię1 \ Imię2 \ Imię3, więc kiedy go wyświetlam, wszystkie ukośniki odwrotne znikają i widzę Imię1Name2Name3

Znalazłem rozwiązanie, aby to naprawić:

var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");

Nie zapomnij dodać @using Newtonsoft.Jsonna górze chtmlstrony.

DmitryBoyko
źródło