J'essaie de passer un texte à ma fonction JavaScript comme ci-dessous.

hplDetails.NavigateUrl = "JavaScript:GetSpecialEquipmentsDetails('" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentCode + "','" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentName + "')";

Mon deuxième paramètre contient n'importe quel texte avec des accents, des caractères spéciaux. Mais quand j'arrive dans ma fonction JavaScript, le texte est mutilé. Quelqu'un a des conseils pour moi?

0
mcamara 17 oct. 2011 à 17:07

3 réponses

Meilleure réponse

Au lieu de <asp:HyperLink>, essayez d'avoir une telle chose:

<a id="hplDetails" runat="server">Text here</a>

Attribuez ensuite son URL avec un tel code:

hplDetails.Attributes["href"] = "URL here.....";

Espérons que cela ne gâchera pas vos personnages spéciaux.

1
Shadow Wizard is Ear For You 17 oct. 2011 à 13:30

ASP.NET code la propriété NavigateUrl.

Utilisez decodeURI dans votre fonction js.

1
Nicholas Butler 17 oct. 2011 à 13:21

Avoir une fonction utilitaire comme celle-ci dans une classe appelée, disons StringUtil:

public static string JsEncode(string text)
{
    StringBuilder safe = new StringBuilder();
    foreach (char ch in text)
    {
        // Hex encode "\xFF"
        if (ch <= 127)
            safe.Append("\\x" + ((int)ch).ToString("x2"));
        // Unicode hex encode "\uFFFF"
        else
            safe.Append("\\u" + ((int)ch).ToString("x4"));
    }
    return safe.ToString();
}

... signifie que vous pouvez ensuite encoder les valeurs en tant que chaînes sécurisées, encodées en JavaScript:

hplDetails.NavigateUrl = "JavaScript:GetSpecialEquipmentsDetails('" + StringUtil.JSEncode( ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentCode + "','" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentName ) + "')";
1
Duncan Smart 17 oct. 2011 à 13:35