我在Windows Phone 8项目中将一个非常长的查询字符串从一个页面传递到另一个页面。
我需要将这些参数从新页面传递到另一个页面,但不想重建整个QueryString。
有没有办法将整个QueryString分配给新的String?
像
这样的东西String newQuery = NavigationContext.QueryString.ToString();
答案 0 :(得分:1)
我需要将这些参数从新页面传递到另一个页面但是 不想重建整个QueryString
为什么不呢?这是编程:在一个地方完成所有工作,这样你以后就不必再做了。我们使用extension method来执行此操作。
将此代码放在静态类中......
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,而不是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);