Ich habe eine Ansicht ASP.NET MVC-Modell, das ich auf eine JavaScript-Funktion, wenn die Seite geladen werden übergeben müssen, und ich bin derzeit dabei, dass in etwa so:Wie wird eine JSON-Zeichenfolge mit HTML-Zeichen codiert?
<script type="text/javascript">
$(window).on("load", function() {
myFunction(@Html.Raw(JsonConvert.SerializeObject(Model)));
});
</script>
Mit anderen Worten, ich bin mit JSON.NET, um das Modell zu JSON zu serialisieren und dieses (uncodierte) in meinen <script>
Block einzufügen.
Wenn gemacht, endet der Skriptblock etwas wie aufzublicken:
<script type="text/javascript">
$(window).on("load", function() {
myFunction({"myProperty": "the property value"});
});
</script>
Das heißt, bis zu einem Punkt arbeitet. Wenn mein Modell jedoch eine Zeichenfolgeneigenschaft enthält, deren Text HTML-Tags * enthält, verwirren diese den Browser dahingehend, dass der <script>
-Block beendet ist und der Browser beginnt, die im Ansichtsmodell eingebetteten Tags zu rendern.
- bearbeiten: pro die Kommentare, geschieht dies nur, wenn ein Tag gibt es
</script>
.
Zum Beispiel:
<script type="text/javascript">
$(window).on("load", function() {
myFunction({"myProperty": "<script>...</script>"});
});
</script>
Wie kann ich dieses Problem lösen?
@Jamiec du liegst falsch, browers tun das. Sie suchen nach '' und beenden das Skript. – Halcyon
@Jamiec: Nun, in diesem Fall zeigen sowohl IE11 als auch Chrome das gleiche Verhalten. Es ist erwähnenswert, dass das JSON-Fragment sehr groß ist und der problematische Text ein ganzes HTML-Dokument ist, was sich darauf auswirken kann, ob der Browser sagt "sicherlich muss ein End-Tag oder Zitat fehlen". –
@Halcyon gibt es kein '' Tag in der Zeichenfolge in der Frage - seine 'div' Tags! (daher der Punkt "etwas, was uns nicht sagt") – Jamiec