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

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

Вот быстрый вопрос для всех гуру Silverlight.

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

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

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


person Scott Ferguson    schedule 16.02.2009    source источник


Ответы (5)


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

HtmlPage.Window.CreateInstance

or

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();
person Patrick McDonald    schedule 16.02.2009
comment
HtmlPage.Window.Invoke (location.reload (true);); у меня все-таки не сработало. Когда я точно узнаю, что делает, я выложу это здесь. Спасибо, в любом случае. - person Scott Ferguson; 21.05.2009
comment
хорошо, это было 90% пути. Все, что мне было нужно, это создать клиентскую функцию javascript на странице ASP.Net в моем случае, названную reload (), которая выполняла location.reload (true). Тогда в моем коде C # было несложно получить эту строку: HtmlPage.Window.Invoke (reload); Еще раз спасибо. - person Scott Ferguson; 21.05.2009

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

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

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

person R4cOOn    schedule 18.06.2009
comment
Это было именно то, что я искал. Я скоро проверю это и поставлю +1 к вашему ответу, если он сработает так, как я ожидал. Спасибо! - person Scott Ferguson; 19.06.2009
comment
Что ты имеешь в виду? Конечно, на сервере это не сработает, Silverlight на стороне клиента! Вы имеете в виду, что хотите перезапустить свой веб-сервер из клиента? - person R4cOOn; 04.12.2009
comment
Это работает, если на странице есть элемент ‹form› (например, любая страница веб-форм). Без элемента ‹form› (например, многие страницы ASP.NET MVC) нечего отправлять, и вы получаете InvalidOperationException. - person Richard Beier; 19.10.2011

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

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

person adv12    schedule 02.11.2012
comment
Это хороший вариант, если HTML-страница хоста не содержит элемента формы, который можно отправить. - person Scott Munro; 24.11.2015

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

this.ContentFrame.Navigate (новый Uri ("", UriKind.Relative));

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

person Jesse    schedule 03.11.2009

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

person Blounty    schedule 16.02.2009