2009-11-07 11 views
8

私は、ユーザーの一覧を表示するページを持っています。各ユーザーにはIDとHyperlinkBut​​tonがあり、ユーザーの詳細を表示します。SilverlightがHyperlinkBut​​tonを使用するページ間のパラメータを渡す

ハイパーリンクボタンを押すと、別のページ(UserDetailsという名前)に移動して、押されたユーザーのIDを何とか読んでいます。

どうすればいいですか?

おかげで、 ロニー

答えて

7

私は素晴らしい解決策を見つけましたが、よりエレガントなものを聞きたいと思います。 UriMapperセクション内

は、私は別のUriMapping追加しました:そうすることによって

<uriMapper:UriMapping Uri="/UserDetails/{UserId}" MappedUri=/Views/UserDetails.xaml"/> 

を、「/ UserDetailsの形式で、すべてのナビゲーション/ XXXは同じページ、UserDetails.xamlにナビゲートされる

だから今、私のHyperlinkBut​​tonが必要な形式でNavigateUriで生成されます。上の今

NavigateUri = "/ UserDetails/1234"

、 UserDetails.xamlページのOnNavigatedToメソッドでは、Uriパラメータ(e.Uri)を解析し、それに応じてUserの詳細を読み込むことができます。

+5

Uriを解析する必要はありません。MappedUriを "/Views/UserDetails.aspx?id={UserId}"に変更してください。 NavigationContextを使用できるようになります。値を取得するためのQueryString ["id"] – TimothyP

2

何についてはそうのようなクエリ文字列にIDを置きます。

<HyperlinkButton 
    x:Name="btn" /**other properties**/ 
    NavigateUri="http://www.yoururl.com/details.aspx?ID=1234"> 
</HyperlinkButton> 

Details.aspxにあなたはSilverlightのオブジェクト

<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プロパティにIDを置くことができ、あなたはあなたに、そのように

public string GetID(){ 
    return string.Format("ID={0}", Request.QueryString[0]); 
} 

ようinitParamsを埋めますSilverlightアプリケーションの起動時にIDを読み取ることができます

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     int ID = Convert.ToInt32(e.InitParams["ID"]); 
    } 
+0

おかげのように。 しかし、同じaspxファイルにとどまることは可能ですか? "NavigateUri ="/UserDetails "+ IDのような相対パスを使用する – Ronny

+0

もちろん、ナビゲートせずにデータを渡すことができるのであれば、同じページにナビゲートして渡す必要があるのはなぜですか? –

+0

2つのページの間を移動する必要があります。最初のページはページで、ユーザーのリスト(UsersList.xaml)を表示し、2番目のページは特定のユーザーの詳細(UserDetails.xaml)を示します。 私は素敵な解決策を見つけましたが、より洗練された解決策をお聞きしたいです – Ronny

6

あなたは、クエリ文字列からデータを取得するためにNavigationContextを使用することができます。これを試してみてください:ナビゲートページの何かで

<HyperlinkButton NavigateUri="/UserDetails?userId=123" />  

とよりをお使いの再生のため、この

string customerId = this.NavigationContext.QueryString["customerid"]; 
関連する問題