2009-11-07 4 views
8

J'ai une page qui affiche une liste d'utilisateurs. chaque utilisateur a un ID et un lien hypertexte pour regarder plus de détails sur l'utilisateur.Silverlight passant des paramètres entre les pages en utilisant HyperlinkButton

Lorsque j'appuie sur le bouton Hyperlink, je voudrais naviguer vers une autre page (appelée UserDetails) et lire en quelque sorte l'ID de l'utilisateur qui a été pressé.

Comment puis-je faire cela?

Merci, Ronny

Répondre

7

J'ai trouvé une bonne solution, mais j'aimerais entendre quelque chose qui est plus élégant.

Dans la section UriMapper J'ai ajouté une autre UriMapping:

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

Ce faisant, toute navigation dans le format «/UserDetails/XXX sera naviguées même page, UserDetails.xaml

.

Alors maintenant, mon HyperlinkButton est généré avec une NavigateUri avec le format nécessaire:

NavigateUri = "/ UserDetails/1234"

maintenant, sur la UserDetails.xaml, dans la méthode OnNavigatedTo, je peux analyser le paramètre Uri (e.Uri) et charger les détails de l'utilisateur en conséquence.

+5

Pas besoin d'analyser l'Uri. Changez le MappedUri en "/Views/UserDetails.aspx?id={UserId}" à côté de vous ll sera capable d'utiliser NavigationContext.QueryString ["id"] pour obtenir la valeur – TimothyP

2

Qu'en est-il mis ID dans la chaîne de requête comme si.

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

à Details.aspx vous pouvez mettre ID dans initParams propriété de l'objet silverlight

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
    <param name="initParams" value='<%= GetID() %>' /> 
</object> 

dans Details.aspx.cs, le code derrière de Details.aspx, vous remplissez les initParams comme si

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

puis, vous peut lire l'ID de votre démarrage de l'application Silverlight

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

Merci pour votre replay. Mais est-il possible de rester dans le même fichier aspx? Et utiliser le chemin relatif comme "NavigateUri ="/UserDetails "+ l'ID – Ronny

+0

Bien sûr, c'est possible, mais pourquoi avez-vous besoin de naviguer et de transmettre des données à la même page si vous pouvez passer les données sans naviguer? –

+0

J'ai besoin de naviguer entre les deux pages, le premier est la page et qui montre la liste des utilisateurs (UsersList.xaml) et le second est celui qui montre un détail d'utilisateur spécifique (UserDetails.xaml). J'ai trouvé une bonne solution, mais je voudrais entendre quelque chose qui est une solution plus élégante – Ronny

6

vous pouvez utiliser NavigationContext pour obtenir des données de chaîne de requête .. essayez ceci:

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

et que dans la page quelque chose comme ça

string customerId = this.NavigationContext.QueryString["customerid"]; 
naviguée
Questions connexes