Response.Redirect - 如果当前页面的URL带有目标URL的Hash,发送重定向会出现问题

4
我正在使用ASP.NET Webforms C# 3.5,并利用Response.Redirect在事件调用后重定向页面。如果我提交请求,第一个请求正常工作。我目前正在使用Response.Redirect。我尝试过使用Server.Transfer并将True和False作为第二个参数传递给Redirect函数,以及尝试关闭SmartNavigation。如果我单击提交按钮,则页面会按预期执行,并且锚点会强制将页面定位到正确位置。如果我再次单击提交,则相同的URL被返回,并且浏览器不做任何事情,只是“挂起”。如果我从我的URL中删除散列部分,则重定向正常工作。问题似乎只会在使用锚点(散列符号)将请求重定向到当前URL并发生新的重定向时出现。
Response.Redirect(/Script.aspx?param1=something&param2=something#anchor);

我还尝试了这个:

Response.Redirect(/Script.aspx?param1=something&param2=something&#anchor);

无论哪种情况,删除锚点都可以解决问题。

这个问题出现在Chrome和Firefox中。Firebug报告请求完成并显示响应字符串,一切看起来都应该有井号,但浏览器却一直挂着。我的意思是,它显示光标作为进度\正在执行某些操作的光标类型。


你能发一些代码展示你是如何进行重定向的吗? - Jay
1个回答

8
这是Response.Redirect常见的问题。
你可以设置
Response.Headers.Add("Location", "/Script.aspx?param1=something#anchor");
Response.Status = "301 Moved Permanently"; //or whatever status code you want to deliver, 302 or 307 are standard for Response.Redirect(...)

或者您可以将其作为额外的查询字符串参数传递,并使用JavaScript附加锚点:

//page
Response.Redirect("/Script.aspx?param1=something&anchor=anchor");

//script.aspx
void Page_Init(object sender, EventArgs e)
{
    ClientScript.RegisterClientScriptBlock(typeof(string), "anchor", "<script type=\"text/javascript\">location.href = location.href + '#" + Request["anchor"] + "';</script>");
}

1
第一种方法无法正常工作,但第二种方法非常好用。我进行了一项改进,在运行Page_Init中的代码之前添加了一个检查if (Request["anchor"] != null),以便在不必要时不会添加# - Tot Zam
1
当使用第一种方法时,如果出现“此操作需要IIS集成管道模式”错误,您可以通过将Response.Headers.Add更改为Response.AddHeader来修复它。 - Tot Zam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接