0

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

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

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

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

进一步澄清

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

4

2 回答 2

1

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

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

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

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

更新

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

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

于 2012-11-20T00:29:13.847 回答
0

最简洁的答案是不。

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

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

于 2012-11-19T19:31:37.680 回答