Text
Der TextBuilder (Fmh.Text(...)) gibt Text aus und kodiert ihn dabei
HTML-sicher. Das ist die Absicherung für Werte, die aus Eingaben oder der Datenbank stammen —
mit Decoded() lässt sich die Kodierung für vertrauenswürdiges Markup wieder aufheben.
Dekodiert ausgeben (Decoded)
Decoded() macht die Kodierung wieder rückgängig – das Markup wirkt, der Text wird also als HTML gerendert.
@* Decoded() hebt die Kodierung beim Rendern wieder auf: Aus <b> wird wieder <b>, das Markup
wirkt also. Nur für Inhalte verwenden, die die Anwendung selbst erzeugt – bei Benutzereingaben
wäre das eine offene Tür für eingeschleustes Markup. *@
@{
var meldung = "<b>Fett</b> und <em>kursiv</em> – als Markup gerendert";
}
<p class="mb-0">@Html.Fmh(Fmh.Text(meldung).Decoded())</p>
Darstellung
Fett und kursiv – als Markup gerendert
Der TextBuilder wird über Fmh.Text() bzw. Fmh.Text(text) erzeugt und mit @Html.Fmh(...) gerendert. Er gibt Text aus und kodiert ihn dabei HTML-sicher:
@Html.Fmh(Fmh.Text(modell.Bemerkung))
Ohne weitere Angabe ist der Ausgabetext leer und die Kodierung aktiv.
Methoden
| Methode | Erklärung |
|---|---|
.Text(string) |
Setzt den Text und kodiert ihn sofort (ToHtmlEncode). Aus <b> wird <b>. |
.Decoded(bool = true) |
Dekodiert den Text beim Rendern wieder — das Markup wirkt also. |
Fmh.Text(text) ist die Kurzform für Fmh.Text().Text(text).
Kodiert oder dekodiert?
- Kodiert (Standard) ist die richtige Wahl für alles, was aus einer Eingabe, einem Import oder der Datenbank stammt. Eingeschleustes Markup erscheint als Text und wird nicht ausgeführt.
Decoded()hebt die Kodierung wieder auf. Weil.Text(...)zuerst kodiert undBuild()danach dekodiert, kommt der ursprüngliche Wert unverändert in die Seite — inklusive aller Tags. Das ist nur für Inhalte vertretbar, welche die Anwendung selbst erzeugt (z. B. eine zusammengesetzte Meldung mit<strong>). Für Benutzereingaben ist es eine offene Tür.
Verhältnis zu Razor
Razor kodiert mit @modell.Bemerkung ohnehin. Der Builder lohnt sich, wo eine Ausgabe als IBuilder gebraucht wird — etwa als Inhalt eines anderen Builders (Dialog, TabStrip) — oder wo im selben Ausdruck zwischen kodiert und dekodiert umgeschaltet werden soll. Für rohes Markup ohne Builder gibt es in Razor @Html.Raw(...); Decoded() hat dieselbe Wirkung und dieselbe Verantwortung.
Text kodiert ausgeben
Der Grundfall: Text(...) kodiert den Wert, Markup erscheint deshalb als Zeichen und wird nicht ausgeführt.
@* Text(...) kodiert den Wert beim Setzen. Markup erscheint deshalb als Zeichenkette und wird nicht
ausgeführt – genau das ist der Zweck bei Werten aus Eingaben oder der Datenbank. *@
@{
var eingabe = "<b>Fett</b> & <script>alert('Hallo')</script>";
}
<p class="mb-0">@Html.Fmh(Fmh.Text(eingabe))</p>
Darstellung
<b>Fett</b> & <script>alert('Hallo')</script>
Der TextBuilder wird über Fmh.Text() bzw. Fmh.Text(text) erzeugt und mit @Html.Fmh(...) gerendert. Er gibt Text aus und kodiert ihn dabei HTML-sicher:
@Html.Fmh(Fmh.Text(modell.Bemerkung))
Ohne weitere Angabe ist der Ausgabetext leer und die Kodierung aktiv.
Methoden
| Methode | Erklärung |
|---|---|
.Text(string) |
Setzt den Text und kodiert ihn sofort (ToHtmlEncode). Aus <b> wird <b>. |
.Decoded(bool = true) |
Dekodiert den Text beim Rendern wieder — das Markup wirkt also. |
Fmh.Text(text) ist die Kurzform für Fmh.Text().Text(text).
Kodiert oder dekodiert?
- Kodiert (Standard) ist die richtige Wahl für alles, was aus einer Eingabe, einem Import oder der Datenbank stammt. Eingeschleustes Markup erscheint als Text und wird nicht ausgeführt.
Decoded()hebt die Kodierung wieder auf. Weil.Text(...)zuerst kodiert undBuild()danach dekodiert, kommt der ursprüngliche Wert unverändert in die Seite — inklusive aller Tags. Das ist nur für Inhalte vertretbar, welche die Anwendung selbst erzeugt (z. B. eine zusammengesetzte Meldung mit<strong>). Für Benutzereingaben ist es eine offene Tür.
Verhältnis zu Razor
Razor kodiert mit @modell.Bemerkung ohnehin. Der Builder lohnt sich, wo eine Ausgabe als IBuilder gebraucht wird — etwa als Inhalt eines anderen Builders (Dialog, TabStrip) — oder wo im selben Ausdruck zwischen kodiert und dekodiert umgeschaltet werden soll. Für rohes Markup ohne Builder gibt es in Razor @Html.Raw(...); Decoded() hat dieselbe Wirkung und dieselbe Verantwortung.