2009-02-16 4 views
19

UPDATE: Альтернативным заголовком для этого может быть: Как я могу вызвать javascript из приложения silverlight 2.0.Может ли Silverlight инициировать обновление страницы?

Вот краткий вопрос для всех вас, гуру Silverlight.

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

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

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

ответ

20

Apparently вы можете вызвать скрипт JS из Silverlight с использованием

HtmlPage.Window.CreateInstance 

или

HtmlPage.Window.Invoke 

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

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(); 
+1

HtmlPage.Window.Invoke ("location.reload (истина);"); для меня все-таки не работало. Когда я узнаю, что именно, я отправлю его здесь. Спасибо, в любом случае. –

+4

ОК, это было 90% пути. Все, что мне нужно, это создать javascript-клиент на странице ASP.Net в моем случае, называемый reload(), который сделал location.reload (true). Тогда из моего кода на C# было просто: HtmlPage.Window.Invoke («перезагрузка»); Еще раз спасибо. –

+0

хороший, я обновлю свой ответ, чтобы включить эту новую информацию. –

1

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

25

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

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

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

+0

Это именно то, что я искал. Я скоро проверю это, и +1 ваш ответ, если он будет работать так, как я ожидал. Благодаря! –

+0

Это работает нормально локально, но не работает на сервере. – ThePower

+1

Что это значит? Конечно, он не будет работать на сервере, Silverlight находится на стороне клиента! Вы хотите перезагрузить веб-сервер от клиента? – R4cOON

2

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

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

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

6

Простое примечание о том, почему 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);

+0

Это хороший вариант, если HTML-страница хоста не содержит элемент формы, который может быть отправлен. –

Смежные вопросы