2009-02-16 8 views
19

MISE À JOUR: Un titre alternatif pour cela pourrait être: Comment puis-je appeler javascript à partir de mon application Silverlight 2.0.Est-ce que Silverlight peut initier des actualisations de page?

Voici une question rapide pour tous vos gourous Silverlight.

J'ai une application Silverlight qui affiche un compte à rebours chronomètre. L'application est hébergée dans une application Web ASP.Net, Ce que je veux faire est quand le chronomètre atteint zéro, l'application force une actualisation de la page du serveur de la page d'hébergement.

Est-ce possible?

Si oui, une chance d'un extrait de code?

Répondre

20

Apparently vous pouvez appeler un script JS de Silverlight en utilisant

HtmlPage.Window.CreateInstance 

ou

HtmlPage.Window.Invoke 

Le JavaScript pour refresh une page est

location.reload(true) 

Je ne suis pas Silverlight ou Cependant, un expert JavaScript, pas sûr si cela fonctionne dans tous les navigateurs, ou même du tout.

EDIT:

Scott a publié un commentaire à cette réponse avec sa solution finale.

Il avait besoin de créer une fonction client JavaScript sur la page ASP.Net appelée reload() qui a fait le fichier location.reload (true). Puis ce fut une simple question de son code C# pour reload:

HtmlPage.Window.Invoke("reload"); 

Comme @ R4cOON suggéré, vous pouvez également utiliser:

System.Windows.Browser.HtmlPage.Document.Submit(); 
+1

HtmlPage.Window.Invoke ("location.reload (true);"); n'a pas fonctionné pour moi après tout. Quand je découvrirai exactement ce que je fais, je l'afficherai ici. Merci quand même. –

+4

ok, c'était 90% du chemin. Tout ce dont j'avais besoin était de créer une fonction client javascript sur la page ASP.Net dans mon cas, appelée reload(), qui a fait le fichier location.reload (true). Ensuite, il était simple de mon code C# pour avoir cette ligne: HtmlPage.Window.Invoke ("reload"); Merci encore. –

+0

gentil, je vais mettre à jour ma réponse pour inclure cette nouvelle info –

1

Il est possible qu'une application Silverlight appelle en javascript sur la page, ce qui peut forcer l'actualisation de la page. Alors oui c'est définitivement possible!

25

Pourquoi ne pas simplement rester sur le côté Silverlight et appelez

System.Windows.Browser.HtmlPage.Document.Submit(); 

Fonctionne un régal pour moi. La page entière est rechargée et le contrôle Silverlight redémarre.

+0

C'était exactement le genre de chose que je cherchais. Je vais vérifier rapidement, et +1 votre réponse si cela fonctionne comme je m'y attendais. Merci! –

+0

Cela fonctionne correctement localement mais ne fonctionne pas sur le serveur. – ThePower

+1

Que voulez-vous dire? Bien sûr, cela ne fonctionnera pas sur le serveur, Silverlight est du côté client! Voulez-vous dire que vous voulez redémarrer votre serveur Web à partir du client? – R4cOON

2

Dans mon cas, je ne voulais pas faire du post-scriptum asp.net et perdre mon contexte de page Silverlight, j'ai rafraîchi ma page en y naviguant. De cette façon, les changements de langue que j'ai faits dans ma barre de navigation ont été reflétés sur ma page ou sur le modèle View tel qu'ils viennent en 2008.

this.ContentFrame.Navigate (nouveau Uri ("", UriKind.Relative));

Dans ce cas, j'étais sur ma page d'accueil. "" signifie page d'accueil si vous examinez la solution de navigation basée sur un modèle Silverlight.

6

Juste une note rapide sur pourquoi HtmlPage.Window.Invoke("location.reload(true);"); ne fonctionne pas: il ressort de mes tests rapides que la façon dont Silverlight implémente Invoke est de rechercher une propriété avec le nom donné sur l'objet JavaScript spécifié et de l'appeler. Donc, ce code dirait, "Trouver une propriété sur l'objet fenêtre nommé 'location.reload (true);' et appelez-le avec zéro arguments. " Il existe à la place une méthode GetProperty qui vous permet d'obtenir la propriété location de la fenêtre et d'appeler reload avec le paramètre true. Le code final ressemble à ceci:

((ScriptObject)HtmlPage.Window.GetProperty("location")).Invoke("reload", true);

+0

C'est une bonne option si la page HTML de l'hôte ne contient pas un élément de formulaire qui peut être soumis. –

Questions connexes