@ Html.Raw besteht auf der Codierung von Anführungszeichen

8

MVC4 razor view. Vorausgesetzt, ein String backgroundImage wird wie folgt gesetzt:

%Vor%

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).

    
AndyC 11.07.2013, 15:42
quelle

1 Antwort

3

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).

    
Yellowfog 12.07.2013 10:21
quelle

Tags und Links