2009-02-16 11 views
19

UPDATE: Ein alternativer Titel für dieses könnte sein: Wie rufe ich Javascript von meiner silverlight 2.0 Anwendung auf.Kann Silverlight Seitenaktualisierungen einleiten?

Hier ist eine kurze Frage an alle Silverlight-Gurus.

Ich habe eine Silverlight App, die eine Stoppuhr Countdown anzeigt. Die App wird in einer ASP.Net-Webanwendung gehostet, Ich möchte, dass wenn die Stoppuhr auf Null steht, die App eine Aktualisierung der Serverseite der Hosting-Seite erzwingt.

Ist das möglich?

Wenn ja, besteht die Chance auf ein Code-Snippet?

Antwort

20

Apparently können Sie ein JS-Skript von Silverlight rufen

HtmlPage.Window.CreateInstance 

oder

HtmlPage.Window.Invoke 

Die JavaScript refresh mit einer Seite

location.reload(true) 

ist Ich bin kein Silverlight oder JavaScript-Experte, aber nicht sicher, ob es in allen Browsern funktioniert, oder sogar überhaupt.

EDIT:

Scott hat einen Kommentar zu dieser Antwort mit seiner Endlösung.

Er musste eine JavaScript-Clientfunktion auf der ASP.Net-Seite mit dem Namen reload() erstellen, die die location.reload (true) ausgeführt hat. Dann ist es eine einfache Sache von seinem C# -Code war erneut zu laden:

HtmlPage.Window.Invoke("reload"); 

Wie @ R4cOON vorgeschlagen, können Sie auch:

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

HtmlPage.Window.Invoke ("location.reload (true);"); hat doch nicht für mich funktioniert. Wenn ich genau herausfinde was ich mache, werde ich es hier posten. Danke trotzdem. –

+4

ok, das war 90% der Weg dorthin. Alles, was ich brauchte, war eine JavaScript-Client-Funktion auf der ASP.Net-Seite in meinem Fall, genannt reload(), die das location.reload (true) hat. Dann war es eine einfache Sache aus meinem C# -Code, diese Zeile zu haben: HtmlPage.Window.Invoke ("reload"); Danke nochmal. –

+0

netter, werde ich meine Antwort aktualisieren, um diese neue Info zu enthalten –

1

Es ist möglich, dass eine Silverlight-App auf der Seite JavaScript aufruft, was wiederum die Aktualisierung der Seite erzwingen kann. Also ja das ist definitiv möglich!

25

Warum nicht einfach auf der Silverlight-Seite bleiben und rufen

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

Arbeitet ein Vergnügen für mich. Die ganze Seite wird neu geladen und die Silverlight-Kontrolle kickt backs.

+0

Das war genau die Art von was ich suchte. Ich werde es dir bald ansehen und deine Antwort +1 geben, wenn es so funktioniert, wie ich es erwartet habe. Vielen Dank! –

+0

Das funktioniert lokal, funktioniert aber nicht auf dem Server. – ThePower

+1

Was meinst du? Natürlich funktioniert es nicht auf dem Server, Silverlight ist auf der Client-Seite! Willst du meinen Webserver vom Client neu starten? – R4cOON

2

In meinem Fall wollte ich nicht asp.net Art von Postback und verlieren meine Silverlight Seite Kontext, so dass ich meine Seite durch Navigieren zu aktualisiert. Auf diese Weise werden meine Sprachänderungen, die ich in meiner Navigationsleiste gemacht habe, auf meiner Seite oder in der Ansicht, wie sie im Jahr 2008 erscheinen, wiedergegeben.

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

In diesem Fall war ich auf meiner Homepage. "" bedeutet Homepage, wenn Sie die Silverlight-Vorlagen-Navigationslösung untersuchen.

6

Nur eine kurze Notiz, warum HtmlPage.Window.Invoke("location.reload(true);"); nicht funktioniert: Es scheint von meinem schnellen Testen, dass die Art, wie Silverlight Invoke implementiert, eine Eigenschaft mit dem angegebenen Namen nach dem angegebenen JavaScript-Objekt sucht und aufruft. So würde dieser Code sagen: "Suchen Sie eine Eigenschaft auf dem Fensterobjekt mit dem Namen 'location.reload (true);' und nenne es mit null Argumenten. " Es gibt stattdessen eine GetProperty Methode, mit der Sie die location Eigenschaft des Fensters erhalten und reload darauf mit dem Parameter true aufrufen können. Der endgültige Code sieht wie folgt aus:

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

+0

Dies ist eine gute Option, wenn die Host-HTML-Seite kein Formularelement enthält, das gesendet werden kann. –

Verwandte Themen