我在Silverlight应用程序上创建导航URI时遇到了问题。我有这个URI映射器:
<uriMapper:UriMapping Uri="/Dev/{id}/Cov/{isAnalysed}" MappedUri="/Views/Cov/CovListView.xaml?Id={id}&isAnalysed={isAnalysed}" />
<uriMapper:UriMapping Uri="/Dev/{id}/Cov/{cId}/{cType}" MappedUri="/Views/Cov/CovListView.xaml?Id={id}&cId={cId}&cType={cType}" />
对于CovView.xaml的OnNavigatedTo方法的第一个Uri, NavigationContext.QueryString 会给出这个结果。
[0]: {[Id, 1]}
[1]: {[isAnalysed, true]}
但使用第二个URI进行导航会得到此结果
[0]: {[Id, 1]}
[1]: {[isAnalysed, 3/DAX]}
不确定为什么它仍然使用第一个Uri。
更改URI模式/路径的顺序(在映射和导航时)将解决问题,但对于我的情况,这应该是最后一个选项。
有没有人遇到过这种问题,你做了什么来解决这个问题(除了改变URI模式/路径)?
感谢。
答案 0 :(得分:0)
经过一些实验,我找到了解决问题的两个解决方案。
更改URI映射器以及调用者的模式。其中,对于我的情况不是一个好的解决方案,因为有很多代码已经使用这些URI模式导航到此页面。改变它会改变许多代码。
第二个解决方案是,我发现交换URI序列可以解决问题。而不是上面的序列,我首先放置第二个URI映射。
将映射序列更改为此。
<uriMapper:UriMapping Uri="/Dev/{id}/Cov/{cId}/{cType}" MappedUri="/Views/Cov/CovListView.xaml?Id={id}&cId={cId}&cType={cType}" />
<uriMapper:UriMapping Uri="/Dev/{id}/Cov/{isAnalysed}" MappedUri="/Views/Cov/CovListView.xaml?Id={id}&isAnalysed={isAnalysed}" />
我实现了第二个解决方案,因为它不需要我更改URI的模式。
希望这可以帮助有类似问题的人。