Ich habe einen Controller, der eine Zeichenfolge mit HTML-Markups generiert. Wenn ich sie jetzt in Ansichten anzeige, wird sie als einfache Zeichenfolge mit allen Tags angezeigt. Ich habe versucht, den HTML-Helfer zum Codieren / Decodieren zu verwenden, um es richtig anzuzeigen, aber es funktioniert nicht.
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
Nach meinen Ansichten
@Html.Encode(str)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Mukesh Sharma
quelle
quelle
Html.Raw
sollte helfen.HtmlStrin
Klasse verwenden können, wie inHtmlString str = new HtmlString("<span>Some HTML here</span>");
Antworten:
Sie sind nah dran, was Sie verwenden möchten
@Html.Raw(str)
@Html.Encode
nimmt Zeichenfolgen und stellt sicher, dass alle Sonderzeichen richtig behandelt werden. Dazu gehören Zeichen wie Leerzeichen.quelle
Sie sollten
IHtmlString
stattdessen verwenden:Wenn Sie Modelleigenschaften oder Variablen haben, die HTML enthalten müssen, ist dies meiner Meinung nach im Allgemeinen eine bessere Vorgehensweise. Erstens ist es etwas sauberer. Beispielsweise:
Verglichen mit:
Ich denke auch, dass es ein bisschen sicherer
@Html.Raw()
ist als die Verwendung , da die Sorge, ob Ihre Daten HTML sind, in Ihrem Controller gespeichert bleibt. In einer Umgebung, in der Sie Front-End- und Back-End-Entwickler haben, sind Ihre Back-End-Entwickler möglicherweise besser auf die Daten abgestimmt, die HTML-Werte enthalten können, sodass dieses Problem im Back-End (Controller) verbleibt.Ich versuche generell zu vermeiden,
Html.Raw()
wann immer möglich.Eine andere erwähnenswerte Sache ist, dass ich nicht sicher bin, wo Sie sie zuweisen
str
, aber ein paar Dinge, die mich betreffen, wie Sie dies möglicherweise umsetzen.Dies sollte zunächst in einem Controller erfolgen, unabhängig von Ihrer Lösung (
IHtmlString
oderHtml.Raw
). Sie sollten eine solche Logik aus Ihrer Sicht vermeiden, da sie dort nicht wirklich hingehört.Darüber hinaus sollten Sie Ihre verwenden
ViewModel
, um Werte für Ihre Ansicht zu erhalten (und idealerweise auchIHtmlString
als Eigenschaftstyp verwenden). So etwas zu sehen@Html.Encode(str)
ist ein wenig besorgniserregend, es sei denn, Sie haben dies nur getan, um Ihr Beispiel zu vereinfachen.quelle
Sie können verwenden
@Html.Raw(str)
Siehe MSDN für mehr
quelle
Ich hatte ein ähnliches Problem mit HTML-Eingabefeldern in MVC. Auf der Webseite wurde nur das erste Schlüsselwort des Felds angezeigt. Beispiel: Eingabefeld: "Der schnelle Braunfuchs" Angezeigter Wert: "Der"
Die Lösung bestand darin, die Variable in der value-Anweisung wie folgt in Anführungszeichen zu setzen:
quelle
Ich hatte kürzlich ein ähnliches Problem und Google hat mich hier gelandet. Der Vollständigkeit halber habe ich diese Antwort hier eingefügt, falls auch andere hier landen.
Ich bemerkte, dass, als ich HTML schlecht formatiert hatte , tatsächlich alle meine HTML-Tags entfernt wurden , wobei nur der Nicht-Tag-Inhalt übrig blieb . Ich hatte insbesondere eine Tabelle mit einem fehlenden Tag für die öffnende Tabelle, und dann wurden alle meine HTML-Tags aus der gesamten Zeichenfolge vollständig herausgerissen.
Wenn das oben genannte nicht funktioniert und Sie sich immer noch am Kopf kratzen, überprüfen Sie auch, ob HTML gültig ist.
Ich stelle fest, dass MVC, selbst nachdem ich es zum Laufen gebracht hatte, tbody-Tags hinzufügte, bei denen ich keine hatte. Dies sagt mir, dass eine Bereinigung stattfindet (MVC 5) und dass, wenn dies nicht möglich ist, alle / einige Tags entfernt werden.
quelle