将整个QueryString分配给一个String

本文关键字:一个 String QueryString 分配 | 更新日期: 2023-09-27 18:11:55

在我的Windows Phone 8项目中,我已经从一个页面传递了一个非常长的查询字符串。

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

是否有一种方法来分配整个QueryString到一个新的字符串?

之类的
String newQuery = NavigationContext.QueryString.ToString();

将整个QueryString分配给一个String

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

为什么不呢?这就是编程:在一个地方完成所有的工作,这样以后就不用再做了。让我们使用一个扩展方法来做这件事。

<标题> Silverlight h1> 此代码放入静态类中…
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。净h1> 我最初读到这个问题时,我认为它是针对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的东西。但我觉得重要的是要证明你可以在一个地方完成所有的工作。那就不用再来一次了。如果你想使用内置的方式,使用Uri类的Query属性就可以了。

string QueryString = System.Web.HttpContext.Current.Request.Url.Query;

这里有一个可能更简单的方法…

您可以将结果投影成您选择的格式。下面是一个简单的例子。我使用了IDictionary<string,string>,因为它是NavigationContext.QueryString

的基础类型
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"

如果你把它作为一个查询字符串发送,只要把它拉回OnNavigatedTo()方法,然后你可以将查询存储在页面中,直到你继续?

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

试试这个:

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;
}

如果它在您的OnNavigatedTo()事件中,您可以使用快速,简单的两行代码。可以将其浓缩为一行或展开以检查是否存在?字符。如果您知道总是传递参数,则检查是不必要的,并且这两行可以正常工作:

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

你也可以把它压缩成一行:

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