UWP - Frame仅在传递参数时导航崩溃

时间:2018-04-16 01:52:04

标签: c# uwp navigation unhandled-exception

我试图将点击的元素的ID作为字符串传递给新页面,但应用程序总是崩溃。我不完全确定如何找出问题的原因,因为我发现的每个例子都使用相同的方法,并且它对它们的效果很好。

发件人事件:

private void MovieBox_OnTapped(object sender, TappedRoutedEventArgs e)
{
    var id = (sender as StackPanel).Tag as string;
    Debug.WriteLine(id); //the correct id in string
    Frame.Navigate(typeof(MovieDetailsPage),id);
}

OnNavigatedTo事件

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    string text = e.Parameter as string;
    Debug.WriteLine(text);

    await Task.CompletedTask;
}

应用程序在它之间的某处崩溃似乎就像。在第一个事件上放置一个断点会显示正在发送的id,但它永远不会到达OnNavigatedTo。

我不确定问题是什么,因为如果删除参数,第二页加载就好了。

编辑: 我从App.g.i.cs文件中写了例外:

Exception thrown: 'Newtonsoft.Json.JsonReaderException' in MovieLibraryApp.exe
An exception of type 'Newtonsoft.Json.JsonReaderException' occurred in 
MovieLibraryApp.exe but was not handled in user code
Unexpected character encountered while parsing value: m. Path '', line 0, position 0.

这是xaml(它有点混乱):https://pastebin.com/GkXkxYDS

还有:

Your parameter must be serializable. If it isn't, then use SessionState

整个.cs页面,虽然我还没有完成任何逻辑,因为我从来没有让参数起作用。 MovieDetailsPage.xaml.cs:

public sealed partial class MovieDetailsPage
{
    public MovieDetailsPage()
    {
        InitializeComponent();
        NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
    }

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

        if (e.Parameter != null)
        {
            string text = Convert.ToString(e.Parameter);
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

发问者正在使用Template10(在聊天期间了解它),以下是实施导航的最终和更新答案。

对于Template10:

方式-1

using Template10.Services.SerializationService; 
... 
string id = (string)(sender as StackPanel).Tag; 
string str=SerializationService.Json.Serialize(id); 
Frame.Navigate(typeof(MovieDetailPage), str);

路-2

var NavService = NavigationService.GetForFrame(this.Frame); 
NavService.Navigate(typeof(MovieDetailPage), id);