我有一个将电子邮件数据传递到另一个页面的代码。电子邮件正文可能包含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
有不完整的数据。
参数应该是Url编码的
您应该在Uri的每个参数上使用HttpUtility.UrlEncode()
或Uri.EscapeDataString()
。或者,您可以Uri.EscapeUriString()
在整个Uri上使用。
乌里(Uri)的长度有限制
也许您的琴弦更长并且正在修剪?虽然,我认为如果它更长,它只会抛出一个异常,而不是对其进行修剪,但是您应该将其检出。
更好地将整个电子邮件对象传递给PageReadMail
我认为,将整个电子邮件对象传递给页面,而不是将其转换为字符串并在Uri中传递,将更加容易和安全。
只需将类型的静态属性添加YourEmailObjectType
到PageReadMail
类并设置该属性,然后再导航至页面。导航后,从该属性(而不是从导航Uri)获取电子邮件的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句