我有一个代码,我将电子邮件数据传递到另一个页面。电子邮件正文可能包含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
的数据不完整。
答案 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");