我有一个显示用户列表的页面。每个用户都有一个ID和一个HyperlinkButton来观看有关用户的更多细节。
当按下HyperlinkButton时,我想导航到另一个页面(称为UserDetails),并以某种方式读取被按下的用户的ID。
我该怎么做?
谢谢, 罗尼
答案 0 :(得分:7)
我找到了一个很好的解决方案,但我希望听到一些更优雅的东西。
在UriMapper部分,我添加了另一个UriMapping:
<uriMapper:UriMapping Uri="/UserDetails/{UserId}" MappedUri=/Views/UserDetails.xaml"/>
通过这样做,所有导航格式为“/ UserDetails / XXX”将导航到同一页面,UserDetails.xaml。
现在我的HyperlinkButton是使用具有所需格式的NavigateUri生成的:
NavigateUri = “/的UserDetails / 1234”
现在,在UserDetails.xaml页面上,在OnNavigatedTo方法中,我可以解析Uri参数(e.Uri)并相应地加载用户详细信息。
答案 1 :(得分:6)
您可以使用NavigationContext从查询字符串中获取数据。试试这个:
<HyperlinkButton NavigateUri="/UserDetails?userId=123" />
并且在导航页面中有类似这样的内容
string customerId = this.NavigationContext.QueryString["customerid"];
答案 2 :(得分:2)
如何将ID
放在查询字符串中呢。
<HyperlinkButton
x:Name="btn" /**other properties**/
NavigateUri="http://www.yoururl.com/details.aspx?ID=1234">
</HyperlinkButton>
在Details.aspx
中,您可以将ID放在silverlight对象的initParams
属性中
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="initParams" value='<%= GetID() %>' />
</object>
Details.aspx.cs
中的,Details.aspx
后面的代码,你就像这样填写initParams
public string GetID(){
return string.Format("ID={0}", Request.QueryString[0]);
}
然后,您可以从silverlight应用程序启动中读取ID
private void Application_Startup(object sender, StartupEventArgs e)
{
int ID = Convert.ToInt32(e.InitParams["ID"]);
}