将整个QueryString分配给一个String
本文关键字:一个 String QueryString 分配 | 更新日期: 2023-09-27 18:11:55
在我的Windows Phone 8项目中,我已经从一个页面传递了一个非常长的查询字符串。
我需要将这些参数从新页面传递到另一个页面,但不想重构整个QueryString。
是否有一种方法来分配整个QueryString到一个新的字符串?
之类的String newQuery = NavigationContext.QueryString.ToString();
我需要将这些参数从新页面传递到另一个页面,但是不想重构整个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);