MVC4
razor view. Vorausgesetzt, ein String backgroundImage
wird wie folgt gesetzt:
Warum macht das
? %Vor%produzieren
%Vor% Html.Raw
, new MvcHtmlString
und MvcHtmlString.Create
verhalten sich alle ähnlich.
Ich würde erwarten es zu produzieren
%Vor%(notieren Sie die Anführungszeichen).
Ich habe mir die kompilierte DLL für eine Rasierervorlage angesehen, die dieses Markup enthält. Soweit ich sehen kann, ist das Problem das.
Html.Raw
verwandelt einen String in ein HtmlString
. HttpUtility.HtmlEncode
behandelt IHtmlString
-Instanzen anders als normale Zeichenfolgen, da es keine HTML-Codierung anwendet.
Wenn die programmatisch definierte Zeichenfolge im Kontext des Attributs angegeben wird, wird ein Aufruf an
gesendet %Vor% mit Daten, die zum Generieren des Attributs geeignet sind. Ein Teil dieser Daten ist der HtmlString, der beim Aufruf von Html.Raw
generiert wird. Ein anderer Teil ist ein Flag, das anzeigt, dass der Wert kein Literal ist.
Wegen des nicht-literalen Flagstatus ruft die Methode WriteAttribute
schließlich HtmlEncode
auf. Aber es heißt nicht für HtmlString
, aber für den Zeichenfolgenwert dieses Objekts. Sie haben also einen HTML-codierten Wert in der Ausgabe.
Außerhalb des Kontexts eines Attributs wird der Aufruf an
gesendet %Vor%und das leidet nicht unter dem gleichen Problem. Es scheint mir also ein Fehler zu sein (zumindest wenn ich es genau durchgespielt habe).
Tags und Links razor asp.net-mvc-4