关于Response.Redirect()的方法


这是在一次工作经历中遇到的问题。
首先在Page_Load中添加了一些用来判断用户是否登录的代码,如果没有登录,则提示信息“请先登录”,并跳转到登陆页面;
首次代码如下:
  1. HttpCookie cookie = Request.Cookies["userId"];
  2.         if (Request.Cookies["userId"] != null)
  3.        {
  4.             txtId.Text = cookie["userName"];
  5.         }
  6.         else
  7.         {
  8.             Response.Write("<script> alert('请先登录!');</script>");
  9.             Response.Redirect("~/Login.aspx");
  10.             
  11.         }
这样的代码,貌似没什么问题;但是实际上却存在很大的缺陷;即“请先登录!”不会出现。修改了下
第二次代码如下:
  1.         int temp = 0;
  2.         HttpCookie cookie = Request.Cookies["userId"];
  3.         if (Request.Cookies["userId"] != null)
  4.         {
  5.             txtId.Text = cookie["userName"];
  6.         }
  7.         else
  8.         {
  9.             Response.Write("<script> alert('请先登录!');</script>");
  10.             temp = 1;
  11.         }
  12.         if (temp == 1)
  13.         {
  14.             Response.Redirect("~/Login.aspx");   
  15.         }
想通过这样来显示提示信息之后再跳转页面;但是不起到任何作用
后来在敲Response.Redirect()时发现有两个方法可以重载:(string url)及(string url,bool endResponse)这里我们经常使用的是前一种;稍作修改
第三次代码如下:
  1. int temp = 0;
  2.         HttpCookie cookie = Request.Cookies["userId"];
  3.         if (Request.Cookies["userId"] != null)
  4.         {
  5.             txtId.Text = cookie["userName"];
  6.         }
  7.         else
  8.         {
  9.             Response.Write("<script> alert('请先登录!');</script>");
  10.             temp = 1;
  11.             Response.Redirect("~/Login.aspx", true);   
  12.         }
  13.         if (temp == 1)
  14.         {
  15.             Response.Redirect("~/index.aspx");
  16.         }
上面代码执行的结果还是没有提示信息,直接跳转到Login.aspx页面;而对将代码中的 Response.Redirect("~/Login.aspx", true); 修改为Response.Redirect("~/Login.aspx", false);时,结果就变成跳转到index.aspx页面了,研究后发现bool类型的值决定了页面是否终止执行;这个具体的可以通过断点调试看出具体的执行效果;稍作修改
第四次代码如下:
  1. int temp = 0;
  2.         HttpCookie cookie = Request.Cookies["userId"];
  3.         if (Request.Cookies["userId"] != null)
  4.         {
  5.             txtId.Text = cookie["userName"];
  6.         }
  7.         else
  8.         {
  9.             temp = 1;
  10.             Response.Redirect("~/Login.aspx", false );   
  11.         }
  12.         if (temp == 1)
  13.         {              
  14.             Response.Write("<script> alert('请先登录!');</script>");
  15.             //Response.Redirect("~/index.aspx");
  16.         }
但是即便是如此也还是没能显示提示用户登录的信息;
最终总结3点揭开Response.Redirect();方法的面纱:
1:Response.Redirect();其实在内部执行了方法 Response.End();
原因是Response.End ()方法停止页的执行,并将该执行变换到应用程序的事件中的 Application_EndRequest 事件。故而Response.End 后面的代码行将不执行。
不妨 可以把else部分的代码修改一下,即可看出效果
         Response.Write("<script> alert('请先登录!');</script>");
            Response.End();
            Response.Redirect("~/Login.aspx");
这时提示信息“请先登录”弹出,但并没有跳转到Login.aspx页面;
2:当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面
的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面;
3:如果使用try{ Response.Redirect("......");}catch{.....}的话,则应设置Response.Redirect("......",false); 因为使用重载 Response.Redirect(String url, bool endResponse),对 endResponse 参数它传递 false可以取消对 Response.End 的内部调用;


其实达到显示提示信息“请先登录”,并跳转到登陆页面的代码非常简短。
如下所示:
  1. HttpCookie cookie = Request.Cookies["userId"];
  2.         if (Request.Cookies["userId"] != null)
  3.         {
  4.             txtId.Text = cookie["userName"];
  5.         }
  6.         else
  7.         {
  8.             Response.Write("<script> alert('请先登录!');location.replace('Login.aspx');</script>");
  9.         }
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值