Dan*_*mal 8 c# asp.net webforms
在我的基页中,我需要从查询字符串中删除一个项目并重定向.我不能用
Request.QueryString.Remove("foo")
Run Code Online (Sandbox Code Playgroud)
因为该集合是只读的.有没有办法获取查询字符串(除了那一项)而不迭代整个集合并重新构建它?
Zia*_*iad 10
您可以通过处理原始查询字符串来避免触及原始查询字符串.然后,您可以将页面重定向到包含修改后的查询字符串的URL,如下所示:
var nvc = new NameValueCollection();
nvc.Add(HttpUtility.ParseQueryString(Request.Url.Query));
nvc.Remove("foo");
string url = Request.Url.AbsolutePath;
for (int i = 0; i < nvc.Count; i++)
url += string.Format("{0}{1}={2}", (i == 0 ? "?" : "&"), nvc.Keys[i], nvc[i]);
Response.Redirect(url);
Run Code Online (Sandbox Code Playgroud)
更新:
事实证明我们可以像这样简化代码:
var nvc = HttpUtility.ParseQueryString(Request.Url.Query);
nvc.Remove("foo");
string url = Request.Url.AbsolutePath + "?" + nvc.ToString();
Response.Redirect(url);
Run Code Online (Sandbox Code Playgroud)
您必须重建网址然后重定向.像这样的东西:
string url = Request.RawUrl;
NameValueCollection params = Request.QueryString;
for (int i=0; i<params.Count; i++)
{
if (params[i].GetKey(i).ToLower() == "foo")
{
url += string.Concat((i==0 ? "?" : "&"), params[i].GetKey(i), "=", params.Get(i));
}
}
Response.Redirect(url);
Run Code Online (Sandbox Code Playgroud)
无论如何,我没有测试那个或任何东西,但它应该工作(或至少让你在正确的方向)
| 归档时间: |
|
| 查看次数: |
16356 次 |
| 最近记录: |