2011-08-25 14 views
6

私が使用してページ間の値を送信しようとしています間で値を渡す:のWindows Phone 7 - ページ

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

会社と市の値は次のページに渡されるABC」のような、何らかの形で会社名を& Ltd "が正常に通過していない場合は、次のページに" ABC "を渡します。基本的に "&"の後の部分は削除されます。

ここにフォーマットするオプションがありますか?または私はこれのロジックを書く必要がありますか?

ヘルプが必要です。 &文字が値を分離する手段として、クエリ文字列内の特殊文字として扱われ

おかげ

答えて

6

。不正な文字を最初にエスケープするには、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を呼び出す必要はありません。

+0

Uri.EscapeDataString Worked !!!ありがとうございます – Sri

+0

なぜEscapeUriStringではなくEscapeDataStringを使用していますか? –

+0

@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); 
+0

おかげで、あなたはあなたのアプリケーション全体でアクセスできるグローバルな値を定義することができますApp.xaml.csコードをパラメータを渡すことができます! – Sri

関連する問題