Может ли Silverlight инициировать обновление страницы?

ОБНОВЛЕНИЕ: Альтернативный заголовок для этого может быть: Как я могу вызвать JavaScript из моего приложения Silverlight 2.0.

Вот быстрый вопрос ко всем вам, гуру Silverlight.

У меня есть приложение Silverlight, которое отображает обратный отсчет секундомера. Приложение размещено в веб-приложении ASP.Net. Я хочу, чтобы, когда секундомер достиг нуля, приложение принудительно обновляло страницу сервера на странице хостинга.

Это возможно?

Если так, есть ли шанс фрагмента кода?

5 ответов

Решение

По-видимому, вы можете вызвать JS-скрипт из Silverlight, используя

HtmlPage.Window.CreateInstance

или же

HtmlPage.Window.Invoke

JavaScript для обновления страницы

location.reload(true)

Я не эксперт по Silverlight или JavaScript, поэтому не уверен, работает ли он во всех браузерах или даже вообще.

РЕДАКТИРОВАТЬ:

Скотт опубликовал комментарий к этому ответу со своим окончательным решением.

Ему нужно было создать клиентскую функцию JavaScript на странице ASP.Net под названием reload(), которая выполняла location.reload(true). Тогда это было просто из его кода C# для перезагрузки:

HtmlPage.Window.Invoke("reload");

Как предложено @R4cOON, вы также можете использовать:

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

Почему бы просто не остаться на стороне Silverlight и позвонить

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

Работает угощение для меня. Вся страница перезагружается, и элемент управления Silverlight возвращается.

Просто краткое примечание о том, почему HtmlPage.Window.Invoke("location.reload(true);"); не работает: из моего быстрого тестирования выяснилось, что Silverlight реализует Invoke, чтобы найти свойство с заданным именем в указанном объекте JavaScript и вызвать его. Таким образом, этот код сказал бы: "Найти свойство в объекте окна с именем 'location.reload(true);' и назвать это с нулевыми аргументами." Вместо этого есть GetProperty метод, который позволит вам получить окно location собственность и ссылаться reload на что с параметром true, Окончательный код выглядит так:

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

В моем случае я не хотел делать обратную передачу asp.net и потерял контекст страницы Silverlight, поэтому обновил страницу, перейдя к ней. Таким образом, мои языковые изменения, которые я сделал в моей навигационной панели, были отражены на моей странице или в "Просмотр" в шаблоне 2008 года.

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

В этом случае я был на моей домашней странице. "" означает домашнюю страницу, если вы рассматриваете шаблонное навигационное решение Silverlight.

Приложение Silverlight может вызывать javascript на странице, что, в свою очередь, может вызвать обновление вашей страницы. Так что да, это определенно возможно!

Другие вопросы по тегам