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 &lt;b&gt; 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 &lt;b&gt;.
.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 und Build() 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 &lt;b&gt;.
.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 und Build() 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.