【问题标题】:How can I modify the querystring in Silverlight without refreshing the page?如何在不刷新页面的情况下修改 Silverlight 中的查询字符串?
【发布时间】:2012-11-19 19:20:00
【问题描述】:

我已经看到其他几个基于此的问题,但在处理 Silverlight 时没有明确的答案。

我正在使用 Silverlight 5 和导航框架在我的应用程序的不同部分之间导航。我想做的是在用户执行我想要更新 url 的操作时提供到我的应用程序的深层链接。

我知道我可以通过调用NavigationService.Navigate 来做到这一点,但是这样做会重新初始化整个页面和我的视图模型,而我真正需要做的只是允许用户直接刷新到该视图或保存来自地址的直接链接吧。

我知道我应该能够使用 javascript 来执行此操作,但如果有人知道在 Silverlight 中执行此操作的方法,我宁愿不这样做。

进一步说明

我的一个页面是一份报告。该报告已经具有分页功能。我希望能够在不实际重新加载页面的情况下将 URL 更新为 #MyReport?Page=2(就像我说的分页已经处理好了)。我只需要处理 OnNavigatingTo 函数中的查询字符串,而无需在每次单击某些内容时完全重新加载页面。这将允许用户复制该 Url 并将其放入电子邮件或任何他们想要放置的位置,其他用户将直接访问。

【问题讨论】:

标签: c# silverlight


【解决方案1】:

我在任何地方都没有看到这一点,但是当您手动将哈希添加到 url 时,它会在地址栏中显示为美元符号。

因此,如果我加载到页面:/MyReport 导航框架通过 UriMapper 将其作为#/MyReport 放入 url 栏中,当他们单击以转到报告中的下一组数据时(或过滤器,或者我决定以这种方式导航的任何其他内容)我可以告诉导航服务转到/MyReport#page=2&otherkey=othervalue,导航框架将在后台将其更改为#/MyReport$page=2&otherkey=othervalue,这不会重新加载页面。

然后我可以在OnNavigatedTo 中添加我的自定义功能以添加额外的初始化。当我在代码中对这个值做出反应时,它会将美元符号改回NavigationService.CurrentSource 中的哈希值。

我相信这是因为 silverlight 正在对浏览器中的“hashchanged”事件做出反应并进行适当的导航。它似乎将美元符号作为一种允许开发人员添加哈希而不破坏导航的方式。

更新

即使这会修改 url,也无法根据前进/后退导航对其进行更新。由于导航框架将我的 # 重写为 $ 它并没有进行任何导航,因为我们仍然在同一页面上。向前/向后点击浏览器将转到最后一个 url,但不会触发任何更改,因此我必须手动执行此操作。这可以在页面内NavigationService 对象上的FragmentNavigation 事件中完成。如果处理得当,这将允许在同一个 Silverlight 页面内向前/向后导航。

此解决方案允许深度链接和额外的向前/向后导航,而无需不断重新初始化页面和视图模型。

【讨论】:

    【解决方案2】:

    简短的回答是否定的。

    来自客户端的请求就是请求;虽然您可以决定通过重定向或简单地发送任何内容来交付您喜欢的任何内容,但您无法在不重定向的情况下更改请求。

    如果用户请求 mysite/contenta,而您确实希望他们看到 mysite/contentb,那么唯一的问题是您是否重定向以便他们会在地址栏中看到新的 url,或者您只是提供 mysite /contentb 并且不在乎用户在地址栏中看到什么。

    【讨论】:

    • 其实可以在一些浏览器中改变window.location.hash属性而不触发重载。但是,这可能很难做到,而且我不确定您是否可以从 Silverlight 中做到这一点,因为这不是我所知道的平台。
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2017-12-21
    相关资源
    最近更新 更多