将整个QueryString分配给String?

时间:2014-07-07 19:19:41

标签: c# string windows-phone-8 query-string tostring

我在Windows Phone 8项目中将一个非常长的查询字符串从一个页面传递到另一个页面。

我需要将这些参数从新页面传递到另一个页面,但不想重建整个QueryString。

有没有办法将整个QueryString分配给新的String?

这样的东西
String newQuery = NavigationContext.QueryString.ToString();

5 个答案:

答案 0 :(得分:1)

  

我需要将这些参数从新页面传递到另一个页面但是   不想重建整个QueryString

为什么不呢?这是编程:在一个地方完成所有工作,这样你以后就不必再做了。我们使用extension method来执行此操作。

的Silverlight

将此代码放在静态类中......

public string ToQueryString(this IDictionary dict)
    {
    string querystring = "";
    foreach(string key in dict.AllKeys)
        {
        querystring += key + "=" + dict[key] + "&";
        }
    return querystring;
    }

像这样使用它......

string QueryString = NavigationContext.QueryString.ToQueryString();

ASP.NET

当我最初阅读这个问题时,我认为它适用于ASP.NET,而不是Silverlight。我将在这里留下ASP.NET答案,万一有人偶然发现它在ASP.NET中如何做到这一点。

public string ToQueryString(this NameValueCollection qs)
{
    string querystring = "";
    foreach(string key in qs.AllKeys)
        {
        querystring += key + "=" + qs[key] + "&";
        }
    return querystring;
}

像这样使用它......

string QueryString = Request.QueryString.ToQueryString();

ASP.NET已经存在一些东西。但我觉得重要的是证明你可以在某个地方完成所有的工作。然后不必再做一次。如果你想使用内置方式,那么使用Query property of the Uri class

就可以使用这样的方法
string QueryString = System.Web.HttpContext.Current.Request.Url.Query;

答案 1 :(得分:0)

这是一种可能更简单的方式...

您可以将结果投影为您选择的格式。这是一个简单的例子。 我使用了IDictionary<string,string>因为NavigationContext.QueryString的{​​{3}}

var test = new Dictionary<String,String>();
test.Add("1", "one");
test.Add("2", "two");
test.Add("3", "three");

// Choose any string format you wish and project to array
var newArray = test.Select(item => item.Key + ":" + item.Value).ToArray();

// Join on any separator
string output = String.Join(",", newArray);

这仍然意味着您必须稍后解释结果(根据您选择的格式)。在这里,您将获得类似

的格式
"1:one,2:two,3:three"

答案 2 :(得分:0)

如果您已将其作为查询字符串发送,只需将其拉回OnNavigatedTo()方法,然后您可以将查询存储在页面中,直到您继续前进?。

string newQuery;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    newQuery = NavigationContext.QueryString["queryName"];
}

答案 3 :(得分:0)

试试这个:

public string GetQueryString()
{
    IDictionary<String, String> NavigationContextData = NavigationContext.QueryString;
    string data = "/Pagename.xaml?";
    foreach (var item in NavigationContextData)
    {
        data += item.Key + "=" + item.Value + "&";
    }
    data = data.Substring(0, data.Length - 1);
    return data;
}

答案 4 :(得分:0)

如果它出现在OnNavigatedTo()事件中,您可以使用快速,简单的双线程。这可以压缩为单行或扩展以检查是否存在?字符。如果您知道总是传递参数,那么检查是不必要的,这两行可以正常工作:

string QStr = e.Uri.ToString();
string ParmStr = QStr.Substring(QStr.IndexOf('?') + 1);

您也可以将其压缩成一行:

string ParmStr = e.Uri.ToString().Substring(e.Uri.ToString().IndexOf('?') + 1);