2011-08-25 22 views
6

Estoy tratando de enviar los valores entre las páginas usando:Windows Phone 7 - pasar valores entre páginas

NavigationService.Navigate(new Uri("/ABC.xaml?name=" + Company + "&city=" + City , UriKind.Relative)); 

Aquí los valores de la compañía y de la ciudad se pasan a la página siguiente, de alguna manera los nombres de las compañías como "ABC & Ltd "no está pasando correctamente, simplemente pasa el" ABC "a la página siguiente. Básicamente, la parte posterior a "&" se descarta.

¿Hay una opción aquí para formatear esto ??? ¿O debería escribir una lógica para esto?

¡Necesario ayuda!

Gracias

Respuesta

6

Si alguno de sus cadenas de consulta contienen caracteres que se consideran no válidos en un Uri lo que está haciendo fallará, como usted ha descubierto. Primero debe usar Uri.EscapeDataString para escapar de cualquier carácter ilegal. Cambiar el código que has enviado a la siguiente:

NavigationService.Navigate(new Uri(String.Format("/ABC.xaml?name={0}&city={1}", 
      Uri.EscapeDataString(Company), Uri.EscapeDataString(City)), 
      UriKind.Relative)); 

El escaparon cadenas son automáticamente sin escapar cuando se lee usando NavigationContext.QueryString, así que no hay necesidad de llamar a Uri.UnescapeDataString explícitamente.

+0

Uri.EscapeDataString funcionó !!! Muchas gracias – Sri

+0

¿Por qué usa EscapeDataString en lugar de EscapeUriString? –

+0

@ Clément Leí en algún blog en algún lugar que el primero funciona en algunos casos que este último no, en lo que respecta a la navegación en Windows Phone. Desafortunadamente, no puedo encontrar el enlace ahora. – Praetorian

2

El carácter & se trata como un carácter especial en las cadenas de consulta como un medio para separar los valores. Necesita ser escapado en %26.

Para obtener más información sobre cómo escapar fácilmente URLs usando Uri.EscapeUriString.

Por ejemplo:

string Company = "ABC & D"; 
string City = "Falls Church"; 
string escaped = Uri.EscapeUriString("/ABC.xaml?name=" + Company + "&city=" + City); 
var uri = new Uri(escaped, UriKind.Relative); 
+0

Gracias por responder ... Fue muy útil !! – Sri