2010-05-13 6 views
1

J'essaie d'appeler une fonction à partir d'une application Silverlight. Ce devrait être une tâche très simple à faire mais pour l'instant je n'obtiens pas le résultat que je cherche.Appelez la fonction JavaScript à partir de l'application Silverlight 4.0

Ceci est mon code Silverlight:

private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     HtmlPage.Window.Invoke("SayHello", new string[] { "Salut!" }); 
    } 

Et voici le code JavaScript:

function SayHello(theid) { 
     alert(eval(theid)); 
     var divStatusDiv = document.getElementById("divStatus"); 
     divStatusDiv.style.backgroundColor = "Red"; 
    } 

Le message d'alerte affiche en permanence "non défini" mais quand j'appuyez sur "OK" la couleur de cette DIV est changé en Rouge comme il se doit. Pourquoi est-ce que je suis toujours «indéfini»?

Répondre

2

Vous devez créer le JSON qui peut être transmis correctement au lieu de simplement passer le long d'un tableau comme ça. Vous pouvez simplement retourner "Salut!" au lieu de new string [] {"Salut!" } ou vous pouvez créer le tableau json pour le tableau de chaînes que vous avez.

+0

Comment puis-je créer un tableau json en C#? J'ai trouvé ceci: http://stackoverflow.com/questions/1056121/how-to-create-json-string-in-c est ce que j'ai besoin de faire? – Raha

+0

Son résolu maintenant, j'ai créé un message Jason. – Raha

1

Je ne suis pas familier avec Silverlight, mais si theid a une valeur "Salut!" intérieur de SayHello, vous ne pouvez pas eval, puisqu'il est une chaîne de texte, pas de code. Vous devez remplacer la ligne alert(eval(theid)); par alert(theid);.

+0

J'ai essayé mais ça ne marche pas. Undefined est ce que je reçois. – Raha

0

Utilisez

alert(eval(theid.value)); 
+0

Essayez également d'éviter d'utiliser eval à la fois pour les performances et l'injection de code. –

+0

Je ne pense pas que eval soit une bonne idée, mais s'il vous plaît noter que l'argument est passé comme un tableau de chaînes. – Raha

Questions connexes