NavigationContext返回不完整的数据

时间:2014-12-09 07:45:32

标签: c# navigation uri windows-phone-8.1

我有一个代码,我将电子邮件数据传递到另一个页面。电子邮件正文可能包含HTML。

在第二页上,我发现当'&'或者'#'等进入正文内容(从NavigationContext.QueryString.TryGetValue()获取数据时),字符串断开&未获得进一步的数据。

第一页上发送数据的代码:

string strParameters = string.Empty;

strParameters += "subject=" + objEmail.Subject;
strParameters += "&from=" + objEmail.FromAddress;
strParameters += "&to=";
for (int i = 0; i < objEmail.NumTo; i++)
{
     strParameters += objEmail.GetToAddr(i) + "; ";
}
strParameters += "&cc=";
for (int i = 0; i < objEmail.NumCC; i++)
{
    strParameters += objEmail.GetCcAddr(i) + "; ";
}
strParameters += "&body=" + objEmail.Body;
NavigationService.Navigate(new Uri("/PageReadMail.xaml?" + strParameters, UriKind.Relative));

接收数据的第二页代码:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    string strOriginalString = e.Uri.OriginalString;

    //get data received from navigation service
    string strBody = "";
    string strSubject = "";
    string strTo = "";
    string strCc = "";
    string strFrom = "";
    NavigationContext.QueryString.TryGetValue("body", out strBody);
    NavigationContext.QueryString.TryGetValue("subject", out strSubject);
    NavigationContext.QueryString.TryGetValue("from", out strFrom);
    NavigationContext.QueryString.TryGetValue("to", out strTo);
    NavigationContext.QueryString.TryGetValue("cc", out strCc);
}

此处,strBody的数据不完整。

2 个答案:

答案 0 :(得分:0)

参数应为网址编码

您应该在Uri的每个参数上使用HttpUtility.UrlEncode()Uri.EscapeDataString()。或者,您可以在整个Uri上使用Uri.EscapeUriString()

对Uri的长度有限制

也许你的字符串更长并且正在修剪?虽然,我认为如果它更长,它只会抛出异常,而不是修剪它,但你应该检查它。

更好地将整个电子邮件对象传递给PageReadMail

我认为将整个电子邮件对象传递给页面会更容易,更安全,而不是将其转换为字符串并将其传递给Uri。

只需将YourEmailObjectType类型的静态属性添加到PageReadMail类,然后在导航到该页面之前设置该属性。导航后,从该属性获取电子邮件的数据,而不是从导航Uri获取。

答案 1 :(得分:0)

您只需更换字符(&#39; &amp; &#39; &#39;):

strParameters += "&body=" + objEmail.Body.Replace("&", "%26").Replace("#", "%23");