Les marques diacritiques ne sont pas restituées correctement dans Web App lorsqu’elles ont été écrites avec JQuery

J’ai une application MVC 4 que je localise. Tous les contenus intégrés de ressources et atsortingbués au modèle semblent bien, mais là où j’ai localisé du contenu écrit pour JQuery, le codage semble incorrect. Voici un exemple de rendu, notez les cases rouges … elles devraient être du même mot.

entrez la description de l'image ici

Le problème semble tourner autour de la ligne de code ci-dessous dans ma vue :

$("#FirstName").Watermark("@Resources.ApplicantGivenNameWatermark"); 

Ce JQuery prend essentiellement une chaîne et l’écrit ensuite dans l’entrée quand aucune autre valeur n’a été fournie. Voici un résumé de ce code:

 $.fn.Watermark = function (text) { return this.each( function () { var input = $(this); map[map.length] = { text: text, obj: input }; //Similar removal process lies here, this one also removes the style function insertMessage() { if (input.val().length == 0 || input.val() == text) { input.val(text); input.addClass("watermark"); } else input.removeClass("watermark") } input.focus(clearMessage); input.blur(insertMessage); input.change(insertMessage); insertMessage(); } ); }; 

Toute idée sur la façon de résoudre ce problème serait appréciée. En passant, j’ai pu recréer cela de manière fiable dans un grand nombre de navigateurs.

Essayez de mettre ceci au début de la fonction:

 text=$(''+text+'').text(); 

Le problème est que Razor est conçu pour générer du HTML, pas du Javascript. Par défaut, toutes vos chaînes seront codées avec des entités HTML, ce qui n’est pas approprié pour les chaînes Javascript.

Vous pouvez utiliser @Html.Raw(Model.YourSsortingng) , mais cela vous donnera d’autres problèmes, tels que l’absence de guillemets, etc. (la sortie standard de Razor le fait par «accident»).

Si vous utilisez .NET 4.0 / MVC 3, vous pouvez utiliser le code JavaScriptSsortingngEncode d’AjaxHelper, qui renvoie un IHtmlSsortingng (ce qui signifie que Razor ne le codera pas par une entité) mais effectuera également l’échappement spécifique à JavaScript (y compris les sauts de ligne dans la chaîne source). , que l’encodage standard de Razor ne “corrigera” pas):

 $("#FirstName").Watermark( "@Ajax.JavaScriptSsortingngEncode(Resources.ApplicantGivenNameWatermark")"); 

(Ouais, il devient plutôt bavard … mais a l’avantage de résoudre le problème à sa racine, plutôt que de le contourner par le biais de jQuery – vous pouvez bien sûr créer une aide avec un nom court appelé JavaScriptSsortingngEncode .

Notez qu’il s’agit également d’une méthode statique sur HttpUtility – il est plus facile d’appeler à partir d’un assistant personnalisé que de créer une instance de AjaxHelper , mais notez que contrairement à AjaxHelper , la méthode sur HttpUtility renvoie une chaîne simple. Vous devez donc l’envelopper dans un HtmlSsortingng éviter l’encodage HTML.