2009-02-16 4 views
19

AGGIORNAMENTO: Un titolo alternativo per questo potrebbe essere: Come posso chiamare javascript dalla mia applicazione silverlight 2.0.Silverlight può avviare la pagina Refresh?

Ecco una breve domanda per tutti voi guru Silverlight.

Ho un'app Silverlight che visualizza un conto alla rovescia del cronometro. L'app è ospitata in un'applicazione Web ASP.Net, Ciò che voglio fare è quando il cronometro raggiunge lo zero, l'app forza l'aggiornamento della pagina del server della pagina di hosting.

È possibile?

In tal caso, è possibile che si verifichi uno snippet di codice?

risposta

20

Apparently è possibile chiamare uno script JS da Silverlight utilizzando

HtmlPage.Window.CreateInstance 

o

HtmlPage.Window.Invoke 

La JavaScript per refresh una pagina è

location.reload(true) 

Io non sono un Silverlight o Esperto di JavaScript, quindi non sono sicuro che funzioni su tutti i browser o anche su affatto.

EDIT:

Scott ha pubblicato un commento a questa risposta con la sua soluzione finale.

Aveva bisogno di creare una funzione client JavaScript nella pagina ASP.Net chiamata reload() che ha fatto il location.reload (true). Poi è stata una semplice questione dal suo codice C# per ricaricare:

HtmlPage.Window.Invoke("reload"); 

Come @ suggerito R4cOON, è anche possibile utilizzare:

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

HtmlPage.Window.Invoke ("location.reload (true);"); dopotutto non ha funzionato per me. Quando scoprirò esattamente cosa fa, lo posterò qui. grazie comunque. –

+4

ok, questo era il 90% del modo in cui ci sono. Tutto ciò di cui avevo bisogno era creare una funzione client javascript nella pagina ASP.Net nel mio caso, chiamata reload(), che ha fatto il location.reload (true). Quindi era una cosa semplice dal mio codice C# per avere questa linea: HtmlPage.Window.Invoke ("ricarica"); Grazie ancora. –

+0

nice one, aggiornerò la mia risposta per includere questa nuova informazione –

1

È possibile che un'app Silverlight chiami in javascript sulla pagina, che a sua volta potrebbe forzare l'aggiornamento della pagina. Quindi sì, questo è sicuramente possibile!

25

Perché non semplicemente rimanere sul lato Silverlight e chiamano

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

Per me è un piacere. L'intera pagina viene ricaricata e il controllo Silverlight esegue il pushback.

+0

Questo era esattamente il tipo di cosa che stavo cercando. Presto lo darò un'occhiata, e faccio +1 sulla tua risposta se funziona come mi aspettavo. Grazie! –

+0

Funziona bene localmente ma non funziona sul server. – ThePower

+1

Cosa intendi? Ovviamente non funzionerà sul server, Silverlight è sul lato client! Vuoi dire che vuoi riavviare il tuo server web dal client? – R4cOON

2

Nel mio caso non volevo fare asp.net tipo di postback e perdere il contesto della mia Silverlight pagina così ho aggiornato la mia pagina navigando ad esso. In questo modo le mie modifiche alla lingua che ho apportato nella barra di navigazione sono state riflesse nella mia pagina o Visualizza come vengono nel modello del 2008.

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

In questo caso ero sulla mia home page. "" indica home page se si esamina la soluzione di navigazione basata su modelli di Silverlight.

6

Solo una breve nota sul motivo per cui HtmlPage.Window.Invoke("location.reload(true);"); non funziona: dai miei test rapidi risulta che il modo in cui Silverlight implementa Invoke consiste nel cercare una proprietà con il nome specificato sull'oggetto JavaScript specificato e chiamarla. Quindi questo codice direbbe, "Trova una proprietà sull'oggetto finestra chiamato 'location.reload (true);' e chiamalo con argomenti zero. " Esiste, invece, un metodo GetProperty che consente di ottenere la proprietà location della finestra e di richiamare reload su quello con il parametro true. Il codice finale è simile al seguente:

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

+0

Questa è una buona opzione se la pagina HTML dell'host non contiene un elemento del modulo che può essere inviato. –