更新:另一个标题可能是:如何从我的silverlight 2.0应用程序调用javascript。
以下是您所有Silverlight专家的快速提问。
我有一个显示秒表倒计时的Silverlight应用程序。该应用程序托管在ASP.Net Web应用程序中, 我想要它做的是当秒表击中零时,应用程序强制主机页面的服务器页面刷新。
这可能吗?
如果是这样,代码片段的任何可能性?
答案 0 :(得分:25)
为什么不直接留在Silverlight端并致电
System.Windows.Browser.HtmlPage.Document.Submit();
为我服务。整个页面重新加载,Silverlight控件重新启动。
答案 1 :(得分:20)
Apparently您可以使用
从Silverlight调用JS脚本HtmlPage.Window.CreateInstance
或
HtmlPage.Window.Invoke
refresh页面的JavaScript是
location.reload(true)
我不是Silverlight或JavaScript专家,所以不确定它是否适用于所有浏览器,甚至根本不适用。
修改强>
斯科特用他的最终解决方案发表了对这个答案的评论。
他需要在名为reload()的ASP.Net页面上创建一个JavaScript客户端函数,该函数执行location.reload(true)。然后从他的C#代码重新加载是一件简单的事情:
HtmlPage.Window.Invoke("reload");
正如@ R4cOON建议的那样,你也可以使用:
System.Windows.Browser.HtmlPage.Document.Submit();
答案 2 :(得分:6)
快速说明为什么HtmlPage.Window.Invoke("location.reload(true);");
不起作用:从我的快速测试中可以看出,Silverlight实现Invoke的方式是在指定的JavaScript对象上查找具有给定名称的属性并调用它。所以这段代码会说,“在窗口对象上找到一个名为'location.reload(true);'的属性并用零参数调用它。“相反,有GetProperty
方法可以让您获取窗口的location
属性,并使用参数reload
调用true
。最终代码如下所示:
((ScriptObject)HtmlPage.Window.GetProperty("location")).Invoke("reload", true);
答案 3 :(得分:2)
在我的情况下,我不想做asp.net类型的回发并丢失我的Silverlight页面上下文,所以我通过导航到它刷新了我的页面。这样我在导航栏中所做的语言更改就会反映在我的页面或View中,因为它们来自2008模板。
this.ContentFrame.Navigate(new Uri(“”,UriKind.Relative));
在这种情况下,我在我的主页上。如果您检查Silverlight模板化导航解决方案,则“”表示主页。
答案 4 :(得分:1)
Silverlight应用程序可能会在页面上调用javascript,这反过来可能会强制页面刷新。所以是的,这绝对是可能的!