Может ли Silverlight инициировать обновление страницы? - PullRequest
19 голосов
/ 16 февраля 2009

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

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

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

Возможно ли это?

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

Ответы [ 5 ]

25 голосов
/ 18 июня 2009

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

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

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

20 голосов
/ 16 февраля 2009

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

HtmlPage.Window.CreateInstance

или

HtmlPage.Window.Invoke

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

location.reload(true)

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

EDIT:

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

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

HtmlPage.Window.Invoke("reload");

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

System.Windows.Browser.HtmlPage.Document.Submit();
6 голосов
/ 03 ноября 2012

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

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

2 голосов
/ 03 ноября 2009

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

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

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

1 голос
/ 16 февраля 2009

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

...