2009-11-07 10 views
8

Tengo una página que muestra una lista de usuarios. cada usuario tiene una ID y un HyperlinkButton para ver más detalles sobre el usuario.Parámetros de paso de Silverlight entre páginas usando HyperlinkButton

Al presionar HyperlinkButton, me gustaría navegar a otra página (llamada UserDetails) y de alguna manera leer el ID del usuario que se presionó.

¿Cómo puedo hacer eso?

Gracias, Ronny

Respuesta

7

Encontré una buena solución, pero me gustaría escuchar algo que sea más elegante.

Dentro de la sección UriMapper He añadido otro UriMapping:

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

De esta manera, toda la navegación en el formato de "/ DetallesUsuario/XXX se puede navegar a la página misma, UserDetails.xaml

.

Así que ahora mi HyperlinkButton se genera con una NavigateUri con el formato necesario:

NavigateUri = "/ DetallesUsuario/1234"

ahora, en el Página UserDetails.xaml, en el método OnNavigatedTo, puedo analizar el parámetro Uri (e.Uri) y cargar los detalles del Usuario en consecuencia.

+5

No hay necesidad de analizar el Uri. Cambie el MappedUri a "/ViewsUserDetails.aspx?id={UserId}" después de que usted ' Podré usar NavigationContext.QueryString ["id"] para obtener el valor – TimothyP

2

¿Qué hay de poner ID en cadena de consulta como tal.

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

en Details.aspx puede poner Identificación de initParams propiedad del objeto Silverlight

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

en Details.aspx.cs, código detrás de Details.aspx, llenar los initParams al igual que

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

entonces, puede leer la ID de su inicio de aplicación silverlight

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

Gracias por su repetición. ¿Pero es posible permanecer en el mismo archivo aspx? Y use la ruta relativa como "NavigateUri ="/UserDetails "+ la ID – Ronny

+0

Por supuesto que es posible. Pero ¿por qué necesita navegar y pasar datos a la misma página si puede pasar los datos sin navegar? t usted? –

+0

Necesito navegar entre las dos páginas, la primera es la página y muestra la lista de los usuarios (UsersList.xaml) y la segunda es la que muestra los detalles de un usuario específico (UserDetails.xaml). Encontré una buena solución, pero me gustaría escuchar algo que es una solución más elegante. – Ronny

6

puede utilizar NavigationContext obtener datos de cadena de consulta .. intente esto:

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

y que en la página navegado algo como esto

string customerId = this.NavigationContext.QueryString["customerid"]; 
Cuestiones relacionadas