2009-11-07 12 views
8

Tôi có một trang hiển thị danh sách người dùng. mỗi người dùng có một ID và một HyperlinkButton để xem thêm chi tiết về người dùng.Thông số truyền ánh sáng Silverlight giữa các trang bằng HyperlinkButton

Khi nhấn HyperlinkButton, tôi muốn điều hướng đến một trang khác (được gọi là UserDetails) và bằng cách nào đó đọc ID của người dùng đã được nhấn.

Tôi có thể làm như thế nào?

Cảm ơn, Ronny

Trả lời

7

Tôi tìm thấy một giải pháp tốt, nhưng tôi muốn nghe điều gì đó thanh lịch hơn.

Trong phần UriMapper Tôi đã thêm một UriMapping:

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

Bằng cách làm như vậy, tất cả các hướng trong các định dạng của "/ UserDetails/XXX sẽ được chuyển đến cùng một trang, UserDetails.xaml

.

Bây giờ HyperlinkButton của tôi được tạo ra với một NavigateUri với các định dạng cần thiết:

NavigateUri = "/ UserDetails/1234"

Bây giờ, trên Trang UserDetails.xaml, trong phương thức OnNavigatedTo, tôi có thể phân tích tham số Uri (e.Uri) và tải chi tiết người dùng tương ứng.

+5

Không cần phải phân tích cú pháp Uri.Thay đổi MappedUri thành "/Views/UserDetails.aspx?id={UserId}" next you ' sẽ có thể sử dụng NavigationContext.QueryString ["id"] để lấy giá trị – TimothyP

2

gì về đặt ID trong chuỗi truy vấn như vậy.

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

trong Details.aspx bạn có thể đặt ID trong initParams tài sản của đối tượng Silverlight

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

trong Details.aspx.cs, mã đằng sau của Details.aspx, bạn điền các initParams như vậy

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

sau đó, bạn có thể đọc ID từ khởi động ứng dụng Silverlight của bạn

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

Cám ơn replay của bạn. Nhưng có thể ở lại trong cùng một tệp aspx không? Và sử dụng đường dẫn tương đối như "NavigateUri ="/UserDetails "+ ID – Ronny

+0

Tất nhiên điều đó là có thể. Nhưng tại sao bạn cần điều hướng và chuyển dữ liệu đến cùng một trang nếu bạn có thể truyền dữ liệu mà không cần điều hướng? ' –

+0

Tôi cần điều hướng giữa hai trang, đầu tiên là trang và hiển thị danh sách người dùng (UsersList.xaml) và thứ hai là trang hiển thị chi tiết người dùng cụ thể (UserDetails.xaml). Tôi tìm thấy một giải pháp tốt đẹp, nhưng tôi muốn nghe một cái gì đó đó là giải pháp thanh lịch hơn – Ronny

6

bạn có thể sử dụng NavigationContext để lấy dữ liệu từ chuỗi truy vấn .. thử điều này:

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

và so với một cái gì đó trang lèo lái như thế này

string customerId = this.NavigationContext.QueryString["customerid"]; 
Các vấn đề liên quan