2011-05-25 39 views
2

我正在使用ASP.NET Webforms C#3.5并利用Response.Redirect在事件调用后重定向页面。Response.Redirect - 如果当前页面有散列目标URL的URL发送重定向问题

如果我提交请求,第一个请求可以正常工作。我目前正在使用Response.Redirect。 我尝试使用Server.Transfer并传递True和False作为重定向函数的第二个参数以及试图关闭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报告请求完成,并显示响应字符串,一切看起来应该像英镑符号一样,除了浏览器都挂起。通过挂我的意思是将光标显示为progress \ doing something光标类型。

+0

你可以张贴一些代码,向您展示如何做重定向? – Jay 2011-05-25 21:08:30

回答

6

这是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>"); 
} 
+0

无法获得第一种方法,但第二种方法工作得很好。一个改进之处是,我在'Page_Init'中运行代码之前添加了一个检查if(Request [“anchor”]!= null),因此如果不需要,它不会添加'#'。 – 2016-01-06 18:58:42

+0

当使用第一种方法时,如果您得到一个_“此操作需要IIS集成管道模式”错误,您可以通过将Response.Headers.Add修改为Response.AddHeader来修复它。 – 2016-01-06 19:01:11