【问题标题】:how to pass parameter to a page?如何将参数传递给页面?
【发布时间】:2011-11-23 05:04:32
【问题描述】:

我有一个加载到框架中的页面。在后面的代码中,我有一个名为 mode 的字符串变量。我想要做的是单击超链接时,打开页面并设置模式

我希望以声明方式进行。我试过做

NavigatUri="myPage?mode=edit"

然后在initialize组件调用后的代码后面添加如下代码

mode = this.NavigationContext.QueryString["mode"];

但是我收到了一个找不到页面的错误。我有一种感觉,我在另一个星球上。我是银光的新手。我如何以这种方式导航到页面并传递该参数?

【问题讨论】:

    标签: silverlight silverlight-4.0 parameter-passing


    【解决方案1】:

    查看主页中的UriMapper。最后的UriMapping 通常是这样的:-

    <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
    

    您会注意到 Uri 开头的“/”,相应的页面属于“/Views”文件夹。

    使用属性:-

     NavigatUri="/myPage?mode=edit" 
    

    确保您的页面位于 Views 文件夹中。

    但是我很确定你已经拥有了。您真正的问题是您尝试在执行页面构造函数时访问NavigationContext。它在页面生命周期的那个时候不可用。在执行OnNavigatedTo 之前,您不应尝试使用它。

    public partial class MyPage : Page
    {
        public MyPage()
        {
            InitializeComponent();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            string mode = null;
            if (NavigationContext.QueryString.ContainsKey("mode"))
            {
                mode = NavigationContext.QueryString["mode"];
            }
    
            // Do stuff with mode.
        }
    }
    

    您看到“页面未找到错误”的原因是导航应用程序ErrorWindow 只是假设任何未能加载页面是因为找不到页面。假设您已正确编码页面可能是一个合理的假设。

    【讨论】:

    • 我正在使用其中一个模板,我找不到 uri 映射器的位置,哈哈。它应该像这样设置。我试过这个,它似乎不起作用。我不再收到错误消息,但它没有收到参数
    • 找到了 uri 映射器,它已按描述进行设置,但仍无法使用该参数。我将模式值更改为 formMode。我运行了一个显示器来显示导航上下文中存在哪些键,它显示有一个名为 mode 的键,但我似乎无法修改它,并且 formMode 没有通过。
    • 实际上,我只是注意到在地址栏中,尽管我的超链接控件显示 ?formMode=edit,但仍在传递 ?mode=2
    • 想通了哈哈....我只是在完全错误的页面上。我混淆了实际上导致重定向的页面......我失败了。解决方案很好,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多