Wie handhaben Sie Zeilenumbrüche, die in HTML Codiert MVC-Ansicht?
Ich bin nicht sicher, der beste Weg, dies zu behandeln. In meiner index-Ansicht anzeigen ich eine Nachricht, die enthalten ist in TempData["message"]
. Dies ermöglicht es mir, die Anzeige bestimmter Fehler-oder Informationsmeldungen auf die Benutzer, wenn Sie von einer anderen Aktion (zum Beispiel, wenn ein Benutzer versucht, geben Sie die Aktion Bearbeiten, wenn Sie keinen Zugriff haben, es tritt Sie zurück zu dem Index mit der Meldung "Sie sind nicht berechtigt, diese zu Bearbeiten Daten").
Vor der Anzeige der Nachricht, die ich laufen Html.Encode(TempData["message"])
. Allerdings habe ich in letzter Zeit kommen in die Frage, wo für längere Nachrichten, die ich möchte in der Lage sein, trennen Sie die Zeilen aus, die über Zeilenumbrüche (<br>
). Leider (und natürlich), die <br>
wird codiert durch Html.Encode
damit es nicht zu einer tatsächlichen Zeilenumbruch.
Wie kann ich Zeilenumbrüche korrekt in Html-Codierten strings?
- warum sind Sie auf der Html-Codierung? (Dies ist nützlich für die Eingabe auf dem Rückweg von Formular-Textfeldern fest, die von einem client. Wenn Sie erstellen Sie Ihre eigenen Fehler / Meldung Zeichenfolgen, die Sie nicht haben, um es zu encodieren.)
- Da die Nachricht enthalten kann, die etwas aus der Datenbank. Was ist, wenn ich will, um den Benutzer zu erzählen "Sie successefully gespeichert, den Eintrag <title>"
- KallDrexx, ja das macht Sinn. Vielen Dank für die Klarstellung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stimme ich mit @Roger ' s Kommentar - es ist wirklich keine Notwendigkeit zu Kodieren alles, was Sie haben die volle Kontrolle über.
Wenn Sie immer noch wollen, um zu sein, better safe than sorry (das ist nicht eine schlechte Sache), können Sie mit der Microsoft AntiXss-Bibliothek und verwenden Sie die
.GetSafeHtmlFragment(input)
- Methode - siehe HTML-Bereinigung in der Anti-XSS Libraryz.B.
Die einfachste Lösung, die ich gesehen habe, ist:
Wenn Sie mit einer razor-Ansicht, Sie sollten nicht haben zu rufen, Html.Kodieren in der Regel. Standardmäßig Gestochen html-kodiert alle Ausgabe. Von Scott Gu ' s blog die Einführung von Razor:
Zur info, die Microsoft Web Protection Library (A. K. A. Microsoft AntiXSS-Bibliothek) Entwickler scheinen gebrochen haben, die Versammlung und zog alle früheren Versionen arbeiten. Es ist nicht mehr eine praktikable Lösung in seinem aktuellen Zustand. Ich war auf der Suche auf Sie als eine Lösung für dieses problem vor dem Lesen der Kommentare. Alle 18 von der aktuellen Bewertungen für die neueste Version sind negativ und beschweren sich über Sie gebrochen werden, keine updates von den Entwicklern so dass ich nicht einmal versuchen es.
Ging ich mit @ICodeForCoffee die Lösung, da bin ich mit einer Rasierklinge. Es ist einfach und scheint ganz gut zu funktionieren. Ich brauchte, um potenziell langwierige Beschreibungen mit Zeilenumbrüche und formatieren Sie Sie so, dass die Linie Pausen kommen würde, durch in der Seite.
Nur der Vollständigkeit halber, hier ist der code, den ich verwendet, die wird @ICodeForCoffee code geändert, verwenden Sie das Feld Beschreibung in der Ansicht Modell:
"Prozess" der Nachricht im controller:
Versuchen Sie dies: