ASP.NET MVC Razor wird ohne Codierung gerendert


Antworten:


374

Seit ASP.NET MVC 3 können Sie Folgendes verwenden:

@Html.Raw(myString)

8
Das ist nicht ganz richtig. Ja, Sie können eine Rohzeichenfolge einfügen, aber wenn Sie "'<>etc...diese haben, werden sie maskiert. Der richtige Weg ist die Verwendung des MvcHtmlString, der "unzulässige" Zeichen zulässt. Zum Beispiel, wenn Sie Json-Daten codieren ... ohne ein ganzes Modell zu codieren
Daniel B. Chapman

4
Daniel, Html.Raw () "gibt Markup zurück, das nicht HTML-codiert ist."
Lucas

1
Html.Raw () codiert die Anführungszeichen ..."myAttr='hello';myInt=10"
Serge

4
Es werden KEINE Anführungszeichen codiert. Neben der offensichtlichen Dokumentation, die es einfach als Tag angibt ( "Diese Methode umschließt das HTML-Markup mit der IHtmlString-Klasse, die nicht codiertes HTML rendert ." ) , Habe ich dies auch getestet und Anführungszeichen werden nicht codiert.
James Wilkins


31

Wenn Sie einen MvcHtmlString ausgeben, wird dieser nicht wie der bereits erwähnte @ Html.Raw (String) -Ansatz codiert. Dies kann hilfreich sein, wenn Sie dem HtmlHelper eigene Erweiterungen hinzufügen oder wenn Sie einen Wert aus Ihrem Ansichtsmodell zurückgeben, von dem Sie wissen, dass er HTML enthält.

Zum Beispiel, wenn Ihr Ansichtsmodell war:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Verwenden Sie für Core 1.0+ (und MVC 5+) HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

dann

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>

10

Seien Sie @Html.Raw()vorsichtig, da dies zu größeren Problemen bei der Codierung und Sicherheit führen kann. Ich verstehe den Anwendungsfall, da ich dies selbst tun musste, aber vorsichtig ... Vermeiden Sie einfach, den gesamten Text durchzulassen. Zum Beispiel nur bestimmte Zeichenfolgen beibehalten / konvertieren und immer den Rest codieren:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

Dann können Sie sicher sein, dass Sie keine potenzielle Sicherheitslücke erstellt haben und Sonder- / Fremdzeichen in allen Browsern korrekt angezeigt werden.


+1 Genau das, was ich brauchte! Die Zeichenfolge muss noch codiert werden, aber die Zeilenrückgabe muss HTML sein. Vielen Dank!
Peter

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))für ASP.NET Core
Kenjiuno

5

Bei ActionLink wird im Allgemeinen HttpUtility.Encode für den Linktext verwendet. In diesem Fall können Sie es verwenden HttpUtility.HtmlDecode(myString) , wenn ich mit HtmlActionLink die Zeichenfolge dekodiere, die ich übergeben möchte. z.B:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)



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.