Может ли Silverlight инициировать обновление страницы?
UPDATE: альтернативным заголовком для этого может быть: Как я могу вызвать javascript из приложения silverlight 2.0.
Вот быстрый вопрос для всех вас, гуру Silverlight.
У меня есть приложение Silverlight, которое отображает обратный отсчет секундомера. Приложение размещено в веб-приложении ASP.Net,
То, что я хочу сделать, это когда секундомер достигает нуля, приложение заставляет сервер обновлять страницу хостинга.
Возможно ли это?
Если это так, любой шанс фрагмента кода?
Ответы
Ответ 1
Видимо, вы можете вызвать JS script из Silverlight, используя
HtmlPage.Window.CreateInstance
или
HtmlPage.Window.Invoke
JavaScript для refresh страница
location.reload(true)
Я не эксперт Silverlight или JavaScript, поэтому не уверен, что он работает во всех браузерах или даже вообще.
EDIT:
Скотт опубликовал комментарий к этому ответу с его окончательным решением.
Ему нужно было создать клиентскую функцию JavaScript на странице ASP.Net с именем reload(), которая сделала location.reload(true). Затем было перезаписано его код С#:
HtmlPage.Window.Invoke("reload");
Как предложено @R4cOON, вы также можете использовать:
System.Windows.Browser.HtmlPage.Document.Submit();
Ответ 2
Почему бы просто не остаться на стороне Silverlight и позвонить
System.Windows.Browser.HtmlPage.Document.Submit();
Работает для меня. Вся страница перезагружается, а элемент управления Silverlight возвращается назад.
Ответ 3
Простое замечание о том, почему HtmlPage.Window.Invoke("location.reload(true);");
не работает: из моего быстрого тестирования видно, что способ Silverlight для реализации Invoke - это поиск свойства с заданным именем на указанном объекте JavaScript и его вызов. Таким образом, этот код сказал бы: "Найти свойство на объекте window с именем" location.reload(true) "; и называть его нулевыми аргументами". Вместо этого существует метод GetProperty
, который позволит вам получить свойство location
окна и вызвать reload
с параметром true
. Окончательный код выглядит следующим образом:
((ScriptObject)HtmlPage.Window.GetProperty("location")).Invoke("reload", true);
Ответ 4
В моем случае я не хотел делать asp.net вроде обратной передачи и потерял свой контекст страницы Silverlight, поэтому обновил свою страницу, перейдя к ней. Таким образом, мои языковые изменения, которые я сделал в моем навигационном баре, были отражены на моей странице или в представлении, поскольку они входят в шаблон 2008 года.
this.ContentFrame.Navigate(новый Uri ("", UriKind.Relative))
В этом случае я был на своей домашней странице. "" означает домашнюю страницу, если вы изучите шаблонное навигационное решение Silverlight.
Ответ 5
Приложение silverlight можно вызвать в javascript на странице, что, в свою очередь, может привести к обновлению вашей страницы. Так что да, это определенно возможно!