Vous avez besoin d'échapper aux citations d'une variable dans MVC View pour passer en tant que paramètre JavaScript
-
21-09-2019 - |
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.
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.