如何将多个字符串值从一个页面传递到另一个页面?

时间:2014-10-23 20:40:06

标签: c# navigation query-string windows-phone-8.1

我想出了如何使用查询字符串将一个值作为字符串从一个页面传递到另一个页面。

但我不知道如何传递多个字符串值,例如我有一个wrkTbx,rstTbx和roundTbx。

如何将所有三个值传递到另一个页面?

这是我目前的实施:

锻炼页面:

        private void appBarAddBtn_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/MainPage.xaml?key=" + wrkTbx.Text, UriKind.Relative));
        }

的MainPage:

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            if (NavigationContext.QueryString.ContainsKey("key"))
            {
                string val = NavigationContext.QueryString["key"];
                MessageBox.Show("value is:  " + val);
            }

        }

3 个答案:

答案 0 :(得分:1)

您可以使用&符号(&)分隔多个QueryString参数。但是你还需要确保正确编码这些值,因为它们可能包含特殊字符(例如,像&符号)。

以下是代码的修改版本,它会传递您提到的所有值。

锻炼页面:

private void appBarAddBtn_Click(object sender, EventArgs e)
{
    string url = "/MainPage.xaml" +
        "?wrkTbx=" + System.Net.WebUtility.UrlEncode(wrkTbx.Text) +
        "&rstTbx=" + System.Net.WebUtility.UrlEncode(rstTbx.Text) +
        "&roundTbx=" + System.Net.WebUtility.UrlEncode(roundTbx.Text);

    NavigationService.Navigate(new Uri(url, UriKind.Relative));
}

的MainPage:

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

    if (NavigationContext.QueryString.ContainsKey("wrkTbx"))
    {
        string wrkTbx = NavigationContext.QueryString["wrkTbx"];
        MessageBox.Show("wrkTbx value is: " + wrkTbx);
    }

    if (NavigationContext.QueryString.ContainsKey("rstTbx"))
    {
        string rstTbx = NavigationContext.QueryString["rstTbx"];
        MessageBox.Show("rstTbx value is: " + rstTbx);
    }

    if (NavigationContext.QueryString.ContainsKey("roundTbx"))
    {
        string roundTbx = NavigationContext.QueryString["roundTbx"];
        MessageBox.Show("roundTbx value is: " + roundTbx);
    }

}

答案 1 :(得分:1)

Response.Redirect(String.Format("Default2.aspx?wrkTbx.Text={0}&rstTbx.Text={1}&roundTbx.Text={2}",Server.UrlEncode(wrkTbx.Text),Server.UrlEncode(rstTbx.Text),Server.UrlEncode(roundTbx.Text)));


Server.UrlDecode(Request.QueryString["wrkTbx.Text"]);
Server.UrlDecode(Request.QueryString["rstTbx.Text"]);
Server.UrlDecode(Request.QueryString["roundTbx.Text"]);

答案 2 :(得分:0)

表示wp8

//send data
NavigationService.Navigate(new Uri("/MainPage.xaml?key=" + wrkTbx.Text + "&key2=" + wrkTbx2.Text, UriKind.Relative));

//retrive the information 
string key,stringKey2;
int key2;
if (NavigationContext.QueryString.TryGetValue("key", out key)){
  // use key value
}
if (NavigationContext.QueryString.TryGetValue("key2", out stringKey2)){
    key2 = Int32.Parse(stringKey2); // use key2 value
}

for winndows phone8.1

public class model
{
   public string key{ get; set; }
   public int key2{ get; set; }
}

//send data
Frame.Navigate(typeof(MainPage), new PassedData { key= "my name", key2= 10 });

// get data
protected override void OnNavigatedTo(NavigationEventArgs e){
    model= e.Parameter as model;
}