Может ли 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 на странице, что, в свою очередь, может вызвать обновление вашей страницы. Так что да, это определенно возможно!