在ASP.NET页面中执行response.redirect时,收到错误:
错误:无法获得价值
传递的两个变量(一个值是从查询字符串中检索的,另一个是从viewstate中检索的)
我之前从未见过这个错误,所以我做了一些调查,发现建议使用“endResponse”的“False”值
例如Response.Redirect(“mypage.aspx”,False)
这很有效。
我的问题是:在response.redirect中对“endResponse”值使用“False”有什么副作用?
即服务器的缓存是否有任何影响?页面是否在一段时间内保留在内存中?它会影响查看同一页面的不同用户吗?等等
谢谢!
答案 0 :(得分:14)
从this other question和this blog post,推荐的模式是 -
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
这避免了昂贵的ThreadAbortException / Response.End。有些代码将在CompleteRequest()
之后执行,但ASP.Net会在方便时立即关闭请求。
编辑 - 我认为this answer提供了最佳概述。请注意,如果您使用上述模式,重定向后的代码仍将执行。
答案 1 :(得分:2)
可能会回答您问题的MSDN blog post:
使用[Response.Redirect(url,false)]的缺点是页面将继续在服务器上处理并发送到客户端。如果您正在Page_Init(或类似)中进行重定向并调用Response.Redirect(url,false),则页面将仅在当前页面执行完毕后重定向。这意味着您在该页面上执行的任何服务器端处理都将被执行。
答案 2 :(得分:1)
Response.Redirect(...,true)导致ThreadAbortException。 根据您的异常处理设置,您可能会在每次重定向时为您的日志填充错误消息。