2009-11-07 23 views
8

kullanarak sayfaları arasında parametreleri geçiriyor Kullanıcıların listesini görüntüleyen bir sayfam var. Her kullanıcının bir kimliği ve kullanıcı hakkında daha fazla ayrıntıyı izlemek için bir HyperlinkButton vardır.Silverlight, HyperlinkButton

HyperlinkButton'a basarken, başka bir sayfaya (UserDetails olarak adlandırılır) gitmek ve bir şekilde basılan kullanıcının kimliğini okumak istiyorum.

Bunu nasıl yapabilirim?

sayesinde yaklaşık şöyle sorgu dizesinde ID koymak ne Ronny

cevap

7

Güzel bir çözüm buldum ama daha zarif bir şey duymak isterim. Başka bir UriMapping eklemiş UriMapper bölümde

: Böyle yaparak

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

, "/ UserDetails/XXX biçiminde tüm gezinme, aynı sayfaya UserDetails.xaml yol alınır

.

benim HyperlinkButton gerekli biçimde bir NavigateUri ile oluşturulan Yani şimdi: = "/ UserDetails/1234" Şimdi

, üzerinde

NavigateUri OnNavigatedTo yönteminde UserDetails.xaml sayfası, Uri parametresini (e.Uri) ayrıştırabilir ve Kullanıcı ayrıntılarını buna göre yükleyebilirim.

+5

Uri'yi ayrıştırmanıza gerek yok. MappedUri'yi "/Views/UserDetails.aspx?id={UserId}" olarak değiştirin. NavigationContext'i kullanabilecektir.Değer almak için QueryString ["id"] – TimothyP

2

.

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

Details.aspx size silverlight nesne

<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 yılında, Details.aspx arkasında kod initParams özelliğinde kimliği koyabilirsiniz, size, o zaman

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

gibi initParams doldurmak Silverlight uygulamanızın başlangıcından kimliği okuyabilir

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

teşekkür gibi. Ama aynı aspx dosyasında kalmak mümkün mü? Ve "NavigateUri ="/UserDetails "+ – Ronny

+0

gibi göreceli yolu kullanın. Tabii ki bu mümkündür. Ancak, gezinmeden veriyi iletebilmeniz için neden aynı sayfaya gitmeli ve verileri aktarmalısınız? –

+0

İki sayfa arasında gezinmem gerekiyor, birincisi sayfa, kullanıcıların listesi (UsersList.xaml) ve ikincisi belirli bir kullanıcı detaylarını gösteren kullanıcıdır (UserDetails.xaml). Güzel bir çözüm buldum, ama daha zarif bir çözüm olan bir şey duymak istiyorum. – Ronny

6

sorgu dizesi veri almak için NavigationContext kullanabilirsiniz .. Bu deneyin: navigasyon sayfa şeye

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

ve daha da tekrar için bu

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