silverlight-2.0

silverlight 2.0 - ¿Puede Silverlight iniciar actualizaciones de página?



silverlight-2.0 (5)

Es posible que una aplicación Silverlight invoque javascript en la página, lo que a su vez podría forzar la actualización de la página. ¡Así que sí, esto es definitivamente posible!

ACTUALIZACIÓN: Un título alternativo para esto podría ser: ¿Cómo puedo llamar a JavaScript desde mi aplicación Silverlight 2.0.

Aquí hay una pregunta rápida para todos los gurús de Silverlight.

Tengo una aplicación Silverlight que muestra una cuenta regresiva del cronómetro. La aplicación está alojada en una aplicación web ASP.Net. Lo que quiero que haga es que cuando el cronómetro llegue a cero, la aplicación fuerce una actualización de la página del servidor en la página del servidor.

es posible?

De ser así, ¿hay alguna posibilidad de un fragmento de código?


¿Por qué no simplemente permanecer en el lado de Silverlight y llamar

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

Funciona un placer para mí. Toda la página se vuelve a cargar y el control de Silverlight vuelve a activarse.


En mi caso, no quería hacer el postback de asp.net y perder el contexto de mi página de Silverlight, así que actualicé mi página navegando hacia ella. De esa forma, los cambios de mi lenguaje que hice en mi barra de navegación se reflejaron en mi página o en la Vista, ya que vienen en la plantilla de 2008.

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

En este caso, estaba en mi página de inicio. "" significa la página de inicio si examina la solución de navegación con plantilla de Silverlight.


Solo una nota rápida sobre por qué HtmlPage.Window.Invoke("location.reload(true);"); no funciona: de mis pruebas rápidas parece que la forma en que Silverlight implementa Invoke es buscar una propiedad con el nombre dado en el objeto JavaScript especificado y llamarla. Entonces, este código diría: "Encontrar una propiedad en el objeto de la ventana llamada ''location.reload (true);'' y llámalo con cero argumentos ". En cambio, hay un método GetProperty que le permitirá obtener la propiedad de location la ventana e invocar la reload con el parámetro true . El código final se ve así:

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


Aparentemente puede llamar a un script JS desde Silverlight usando

HtmlPage.Window.CreateInstance

o

HtmlPage.Window.Invoke

El JavaScript para actualizar una página es

location.reload(true)

Aunque no soy un experto en Silverlight o JavaScript, no estoy seguro de si funciona en todos los navegadores o incluso si funciona.

EDITAR:

Scott publicó un comentario a esta respuesta con su solución final.

Necesitaba crear una función de cliente de JavaScript en la página de ASP.Net llamada reload () que realizaba location.reload (true). Entonces fue una simple cuestión de su código C # para volver a cargar:

HtmlPage.Window.Invoke("reload");

Como sugirió @ R4cOON, también puede usar:

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