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?

Antworten:


154

Versuche dies:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>

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>

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

8

Sie können die HtmlStringKlasse auch einfach verwenden

    @(new HtmlString(Model.Content))

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>

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.