win phone 8 NavigationContext 报NullReferenceException解决方案

 private void preview_detail(object sender, RoutedEventArgs e)
        {
            VehicleFromAd vehicleFromAd = (VehicleFromAd)(sender as MenuItem).Tag;
            NavigationService.Navigate(new Uri("/Preview.xaml?carId=" + vehicleFromAd.id, UriKind.Relative));
        }

这里在xaml页面发生preview_detail点击事件时将跳转Preview.xaml页面

起初我代码是这么写的:

 public partial class Preview : PhoneApplicationPage
    {
        private int carId ;
        // 构造函数
        public Preview()
        {
            InitializeComponent();

            // 用于本地化 ApplicationBar 的示例代码
            //BuildLocalizedApplicationBar();

            if (NavigationContext.QueryString.ContainsKey("carId"))
            {
                carId = int.Parse(NavigationContext.QueryString["carId"]);
            }
            webBrowser1.Loaded += WebBrowser_OnLoaded;
            
        }

        //protected override void OnNavigatedTo(NavigationEventArgs e) {
        //    if (NavigationContext.QueryString.ContainsKey("carId"))
        //    {
        //        carId = int.Parse(NavigationContext.QueryString["carId"]);
        //    }
        //    webBrowser1.Loaded += WebBrowser_OnLoaded;
        //}

        private void WebBrowser_OnLoaded(object sender, RoutedEventArgs e)
        {
            webBrowser1.Source = new Uri("http://m.51auto.com/car_info.html?car_id="+carId, UriKind.Absolute);
        }

结果在NavigationContext时发生了NullReferenceException异常,查阅相关资料才知道是 调用时机的问题,在 OnNavigatedTo 调用之后才会NavigationContext才有值。在page的构造函数里调用,太早了。

那咱就修改如下,一切如预期般靠谱,嘿嘿,没深入理解的后果!

public partial class Preview : PhoneApplicationPage
    {
        private int carId ;
        // 构造函数
        public Preview()
        {
            InitializeComponent();

            // 用于本地化 ApplicationBar 的示例代码
            //BuildLocalizedApplicationBar();

            //if (NavigationContext.QueryString.ContainsKey("carId"))
            //{
            //    carId = int.Parse(NavigationContext.QueryString["carId"]);
            //}
            //webBrowser1.Loaded += WebBrowser_OnLoaded;
            
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (NavigationContext.QueryString.ContainsKey("carId"))
            {
                carId = int.Parse(NavigationContext.QueryString["carId"]);
            }
            webBrowser1.Loaded += WebBrowser_OnLoaded;
        }

        private void WebBrowser_OnLoaded(object sender, RoutedEventArgs e)
        {
            webBrowser1.Source = new Uri("http://m.51auto.com/car_info.html?car_id="+carId, UriKind.Absolute);
        }



NullReferenceException

NullReferenceException

NullReferenceException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值