Windows Phone 7 - 在页面之间传递数值

6

我正在尝试通过以下方式在页面之间发送值:

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

这里将公司和城市的值传递到下一页,但是像“ABC & Ltd”这样的公司名称无法正确传递,它只传递“ABC”到下一页。基本上,“&”后面的部分被删除了。

这里有什么选项可以格式化吗?还是我需要编写逻辑来解决这个问题?

需要帮助!

谢谢

3个回答

6
如果您的查询字符串中包含 Uri 认为无效的字符,则会失败,就像您发现的那样。您需要先使用 Uri.EscapeDataString 转义任何非法字符。将您发布的代码更改为以下内容:
NavigationService.Navigate( new Uri( String.Format( "/ABC.xaml?name={0}&city={1}",
          Uri.EscapeDataString( Company ), Uri.EscapeDataString( City ) ), 
          UriKind.Relative ) );

当您使用NavigationContext.QueryString读取转义字符串时,它们会自动取消转义,因此不需要显式调用Uri.UnescapeDataString

你为什么使用EscapeDataString而不是EscapeUriString? - Clément
@Clément,我曾在某个博客上读到过这样的内容,说前者在Windows Phone导航方面的某些情况下比后者更有效,但不幸的是,我现在找不到那篇文章的链接了。 - Praetorian

2

&字符在查询字符串中被视为特殊字符,用于分隔值。需要将其转义为%26

有关如何使用Uri.EscapeUriString轻松转义URL的更多信息。

例如:

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);

谢谢您的回复...很有帮助!! - Sri

0

如果您在我的链接中找到了有用的内容,请将答案标记为有用。 - John Antony Daniel Nolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接