2009-11-07 20 views
8

Ich habe eine Seite, die eine Liste der Benutzer anzeigt. Jeder Benutzer hat eine ID und einen HyperlinkButton, um weitere Details über den Benutzer zu sehen.Silverlight Übergabe von Parametern zwischen den Seiten mit HyperlinkButton

Wenn ich den HyperlinkButton drücke, möchte ich zu einer anderen Seite (genannt UserDetails) navigieren und irgendwie die ID des Benutzers lesen, der gedrückt wurde.

Wie kann ich das tun?

Danke, Ronny

Antwort

7

Ich fand eine nette Lösung, aber ich möchte etwas, das eleganter ist, hören.

Im UriMapper Abschnitt I einen weiteren UriMapping hinzugefügt haben:

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

Auf diese Weise alle Navigation im Format „/ Userdetails/XXX wird auf derselben Seite navigiert, UserDetails.xaml

.

So jetzt mein Hyperlink mit einem NavigateUri mit dem benötigten Format generiert:

NavigateUri = "/ Userdetails/1234"

jetzt

, auf dem UserDetails.xaml-Seite, in der OnNavigatedTo-Methode kann ich den Uri-Parameter (e.Uri) analysieren und die Benutzerdetails entsprechend laden.

+5

Keine Notwendigkeit, die Uri zu analysieren. Ändern Sie die MapdUri zu "/Views/UserDetails.aspx?id={UserId}" next you ' Ich kann den NavigationContext verwenden.QueryString ["id"], um den Wert zu erhalten – TimothyP

2

Was Zeichenfolge setzen über ID in Abfrage wie so.

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

in Details.aspx Sie ID in initParams Eigenschaft von Silverlight-Objekt

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

in Details.aspx.cs, Code hinter der Details.aspx, füllen Sie die initParams wie so

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

dann Sie setzen können, kann die ID aus Ihrem Silverlight-Anwendungsstart

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

Vielen Dank für Ihre Wiedergabe. Aber ist es möglich, in der gleichen aspx-Datei zu bleiben? Und verwenden Sie den relativen Pfad wie "NavigateUri ="/UserDetails "+ die ID – Ronny

+0

Natürlich ist es möglich. Aber warum müssen Sie navigieren und Daten an die gleiche Seite übergeben, wenn Sie die Daten ohne Navigation weitergeben können? t du? –

+0

Ich muss zwischen den beiden Seiten navigieren, die erste ist die Seite und das zeigt die Liste der Benutzer (UsersList.xaml) und die zweite ist die, die eine bestimmte Benutzerdetails (UserDetails.xaml) zeigt. Ich fand eine nette Lösung, aber ich würde gerne etwas hören, das elegantere Lösung ist. – Ronny

6

Sie können NavigationContext verwenden, um Daten aus Query-String zu erhalten .. versuchen Sie dies:

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

und als in der navigierten Seite so etwas wie dieser

string customerId = this.NavigationContext.QueryString["customerid"]; 
Verwandte Themen