【问题标题】:Can Silverlight initiate Page Refreshes?Silverlight 可以启动页面刷新吗?
【发布时间】:2009-02-16 09:38:21
【问题描述】:

更新:另一个标题可能是:如何从我的 silverlight 2.0 应用程序调用 javascript。

这是给所有 Silverlight 专家的一个快速问题。

我有一个显示秒表倒计时的 Silverlight 应用程序。该应用程序托管在 ASP.Net Web 应用程序中, 我想要它做的是当秒表达到零时,应用程序会强制刷新托管页面的服务器页面。

这可能吗?

如果是这样,代码sn-p的任何机会?

【问题讨论】:

    标签: silverlight-2.0


    【解决方案1】:

    为什么不干脆留在 Silverlight 一边打电话

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

    对我来说是一种享受。整个页面重新加载,Silverlight 控件重新启动。

    【讨论】:

    • 这正是我一直在寻找的东西。我会尽快检查一下,如果它按我预期的方式工作,请为您的答案 +1。谢谢!
    • 什么意思?当然它不会在服务器上工作,Silverlight 在客户端!您的意思是要从客户端重新启动您的网络服务器?
    • 如果页面上有
      元素(例如任何 Web 表单页面),则此方法有效。如果没有
      元素(例如,许多 ASP.NET MVC 页面),则无需提交任何内容,并且您会收到 InvalidOperationException。
    【解决方案2】:

    Apparently 你可以使用 Silverlight 调用 JS 脚本

    HtmlPage.Window.CreateInstance
    

    HtmlPage.Window.Invoke
    

    refresh页面的JavaScript是

    location.reload(true)
    

    虽然我不是 Silverlight 或 JavaScript 专家,所以不确定它是否适用于所有浏览器,甚至根本不适用。

    编辑:

    Scott 用他的最终解决方案对此答案发表了评论。

    他需要在 ASP.Net 页面上创建一个名为 reload() 的 JavaScript 客户端函数,该函数执行 location.reload(true)。然后从他的 C# 代码中重新加载是一件简单的事情:

    HtmlPage.Window.Invoke("reload");
    

    正如@R4cOON 建议的那样,您也可以使用:

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

    【讨论】:

    • HtmlPage.Window.Invoke("location.reload(true);");毕竟对我不起作用。当我找出确切的作用时,我会在这里发布。无论如何,谢谢。
    • 好的,这已经完成了 90%。在我的例子中,我所需要的只是在 ASP.Net 页面上创建一个名为 reload() 的 javascript 客户端函数,它执行 location.reload(true)。然后从我的 C# 代码中得到这一行是一件简单的事情: HtmlPage.Window.Invoke("reload");再次感谢。
    【解决方案3】:

    简要说明为什么HtmlPage.Window.Invoke("location.reload(true);"); 不起作用:从我的快速测试看来,Silverlight 实现 Invoke 的方式是在指定的 JavaScript 对象上查找具有给定名称的属性并调用它。所以这段代码会说,“在名为 'location.reload(true);' 的窗口对象上找到一个属性。并以零参数调用它。”相反,有一个GetProperty 方法可以让您获取窗口的location 属性并使用参数true 调用reload。最终代码如下所示:

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

    【讨论】:

    • 如果宿主 HTML 页面不包含可以提交的表单元素,这是一个不错的选择。
    【解决方案4】:

    在我的情况下,我不想做 asp.net 类型的回发并丢失我的 Silverlight 页面上下文,所以我通过导航到它来刷新我的页面。这样,我在导航栏中所做的语言更改就会反映在我的页面或视图中,因为它们来自 2008 模板。

    this.ContentFrame.Navigate(new Uri("", UriKind.Relative));

    在这种情况下,我在我的主页上。如果您检查 Silverlight 模板化导航解决方案,“”表示主页。

    【讨论】:

      【解决方案5】:

      silverlight 应用程序可能会调用页面上的 javascript,这反过来可能会强制您的页面刷新。所以是的,这绝对是可能的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 2013-08-21
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 2012-07-21
        相关资源
        最近更新 更多