今天进行异常处理时,出现一个奇怪问题,上来向大家讨教下A.aspx页面
<body>
    <form id="form1" runat="server">
    <div>
    这是A页面,不出现导异常时应该显示这个!!!!
    </div>
    </form>
</body>B.aspx页面
<body>
    <form id="form1" runat="server">
    <div>
    这是B页面,出异常时应该显示这个!!!!
    </div>
    </form>
</body>default.aspx页面
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>
</body>default.cs文件代码
   protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            Response.Redirect("A.aspx");
        }
        catch( Exception e1)
        {
            Response.Redirect("B.aspx");
            //Response.Write("<script>alert('aaaaaaaaaaaa')</script");
        }
    }运行时 Response.Redirect("B.aspx")这句代码在执行,只看到B.aspx页面,
问下大家为什么会这样!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    出异常了当然就执行catch中的代码块了!
      

  2.   

    一般这样写        bool hasException = false;
            try 
            { 
                hasException = false;
                //Response.Redirect("A.aspx"); 
            } 
            catch( Exception e1) 
            { 
                 hasException = true;            //Response.Redirect("B.aspx"); 
                //Response.Write(" <script>alert('aaaaaaaaaaaa') </script"); 
            } 
            finally
            {
                if(hasException )
                {
                   Response.Redirect("B.aspx"); 
                }
                else
                {
                   Response.Redirect("A.aspx"); 
                }
            }
     
      

  3.   

    Response.Redirect("A.aspx");  有异常吧..
    所以就去了 b.aspx
      

  4.   

    输出一下e1的message, 你就知道出什么错了.
      

  5.   

    MSDN已经解析清楚了“调用 Redirect 等效于在将第二个参数设置为 true 的情况下调用 Redirect。
    Redirect 调用 End,它在完成时引发 ThreadAbortException 异常。”
    可见Redirect方法在内部是调用 Thread.Abort()来中止线程的从而引发ThreadAbortException 异常。
    如果不想立刻中止则,第二个参数设置为falseprotected void Button1_Click(object sender, EventArgs e) 
        { 
            try 
            { 
                Response.Redirect("A.aspx",false); 
            } 
            catch( Exception e1) 
            { 
                Response.Redirect("B.aspx"); 
                //Response.Write(" <script>alert('aaaaaaaaaaaa') </script"); 
            } 
        }