Vous avez besoin d'échapper aux citations d'une variable dans MVC View pour passer en tant que paramètre JavaScript

StackOverflow https://stackoverflow.com/questions/1948590

Question

J'ai vue MVC dans lequel je dois passer une variable de chaîne à JavaScript, mais cette variable de chaîne a des guillemets simples en elle ('). Je suis en train de faire quelque chose comme ceci

<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');" 
                            class="button-link">change</a>

homeAddress a des guillemets simples que je dois contourner en quelque sorte pour que je puisse passer la valeur complète de celui-ci à l'activation de Javascript.

Était-ce utile?

La solution

Pour échapper à une chaîne à une chaîne Javascript littérale, vous remplacez backslash avec double barre oblique inverse, et le séparateur de chaîne avec une barre oblique inverse et le séparateur:

<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>

Note:. Le protocole javascript: est utilisé lorsque vous mettez script dans une URL, non pas comme un gestionnaire d'événements

Edit:
Si le script contient également des caractères nécessitant un encodage HTML, qui devrait être fait après avoir échappé à la chaîne Javascript:

<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>

Alors, si vous ne savez pas ce que la chaîne contient, pour être sûr que vous devez d'abord échapper à la chaîne littérale, puis HTML encode le code afin qu'il puisse être mis dans l'attribut de la balise HTML.

Autres conseils

Vous pouvez utiliser Ajax aide: Ajax.JavaScriptStringEncode(string strToEncode)

Vous pouvez écrire une méthode qui échappe à toutes les apostrophes (et d'autres caractères si nécessaire) avec une barre oblique inverse il est pas mal compris par javascript.

Vous souhaitez encoder homeAddress comme une URL. MVC a construit en aide pour ce faire: UrlHelper.Encode URL (chaîne) - il devrait remplacer un guillemet simple avec %27

Je n'ai pas le temps de le tester, mais regardez HtmlHelper.Encode (string s). Il peut gérer la fuite pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top