Zeigen Sie codiertes HTML mit Rasiermesser an

79

Ich speichere verschlüsseltes HTML in der Datenbank.

Der einzige Weg, wie ich es richtig anzeigen könnte, ist:

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

Es ist hässlich. Gibt es einen besseren Weg, dies zu tun?

jani
quelle

Antworten:

154

Versuche dies:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>
Amitabh
quelle
Vielen Dank! Das ist besser, aber immer noch nicht das, wonach ich suche.
Jani
8
Nach dieser Idee habe ich eine Erweiterungsmethode entwickelt. @ Html.RawDecode (Model.Content)
Jani
3
Vermeiden Sie einfach; am Ende
Giovanny Farto M.
Das funktioniert, aber es ist so schmutzig ... hat am Ende eine Erweiterungsmethode mit dieser Verpackung erstellt. Kann jemand erklären, warum die .Raw nicht einfach funktioniert?
Egli Becerra
47

Verwenden Sie Html.Raw(). Phil Haack hat eine nette Syntaxanleitung unter http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx veröffentlicht .

<div class='content'>
    @Html.Raw( Model.Content )
</div>
Tvanfosson
quelle
1
Danke für die Antwort. Aber ich denke, die Html.Raw () ist "Anzeige wie sie ist, nicht codieren". Wenn ich dies verwende, kann ich mein HTML nicht dekodieren, bevor ich es in der Datenbank speichere. Der vom Benutzer eingegebene Inhalt wird also ohne Sicherheitsüberprüfung angezeigt. Ich denke, das ist nicht die beste Lösung.
Jani
9

das ist ziemlich einfach:

HttpUtility.HtmlDecode(Model.Content)

Eine andere Lösung, Sie könnten auch einen HTMLString zurückgeben, Razor gibt die richtige Formatierung aus:

in der Ansicht selbst:

@Html.GetSomeHtml()

im Controller:

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

Sie können die HtmlStringKlasse auch einfach verwenden

    @(new HtmlString(Model.Content))
Bellash
quelle
0

Ich speichere verschlüsseltes HTML in der Datenbank.

Imho sollten Sie Ihre HTML-codierten Daten nicht in der Datenbank speichern. Speichern Sie einfach im Klartext (nicht verschlüsselt) und zeigen Sie Ihre Daten einfach so an, und Ihr HTML wird automatisch verschlüsselt:

<div class='content'>
    @Model.Content
</div>
Mcanic
quelle
0

Ich habe gerade einen anderen Fall bekommen, um Backslash \mit Razor und Java Script anzuzeigen .

Mein @Model.AreaNamesieht aus wie Name1 \ Name2 \ Name3. Wenn ich es also anzeige , sind alle Backslashes verschwunden und ich sehe Name1Name2Name3

Ich habe eine Lösung gefunden, um das Problem zu beheben:

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

Vergessen Sie nicht, @using Newtonsoft.Jsonoben auf der chtmlSeite hinzuzufügen .

DmitryBoyko
quelle