"Thread was being aborted" exception on redirect - VERY weird!!

A

Alan Silver

Hello,

I have a page that is supposed to do some checking, and if OK, set a
session variable before redirecting to another page. The following code
is a simplified version, I have hard-coded the basket ID and removed a
load of extra checking...

public partial class GoToCheckout : Page {
public void Page_Load(Object o, EventArgs e) {
try {
Session["basketid"] = "178";
//x.Text = "redirecting to PreCheckout.aspx";
Response.Redirect("PreCheckout.aspx");
} catch (Exception ex) {
Response.Redirect("/?msg=" + ex.Message);
//x.Text = "exception - " + ex.Message;
}
}
}

When this page is called, it throws a "Thread was being aborted"
exception when it hits the line...

Response.Redirect("PreCheckout.aspx");

The catch block picks it up and redirects to the home page, putting the
exception message in the querystring. I did this because if I comment
out the redirect in the catch and instead use the (commented out) x.Text
bit (x is a literal, put on the otherwise empty .aspx file for
debugging), then the redirect works fine!!

If I comment out the redirect in the try block and uncomment the x.Text
line there, then the page displays the message "redirecting to
PreCheckout.aspx" exactly as expected.

So, it seems there's some weird problem with the redirect, but I can't
work it out. Nor can I work out why changing the behaviour of the code
in the catch block changes whether the exception is raised or not.

This code has been working fine for a few months now. I have recently
been changing pages to use master pages and themes, which is when I
noticed the problem. However, if I now change this page back to not use
a master or theme, the problem is still there. I am totally baffled, and
would appreciate any help you can offer. TIA
 
J

Joey

There is a second, optional parameter to the Response.Redirect call. It
is a boolean value that indicates whether or not to continue processing
the current page. Set it to false, and you should not get the errors
anymore.

Example:

Response.Redirect("PreCheckout.aspx", false);

JP
 
K

Keith Patrick

I think what's happening is that your first Redirect is ending the page
execution, and thus the request/response. Try passing in "false" as a
second param to Redirect to see if that helps; it tells the redirect not to
end the thread on that call. Another option, since you're within your
application, is to use Server.Transfer instead, as it's more efficient
within the app.
 
A

Alan Silver

There is a second, optional parameter to the Response.Redirect call. It
is a boolean value that indicates whether or not to continue processing
the current page. Set it to false, and you should not get the errors
anymore.

Thanks for the reply. Shortly after posting (ain't that always the
way!!), I found http://tinyurl.com/cj3qp where someone points out that
using Response.Redirect inside a try/catch blocks throws this exception.
I moved it outside the block and the problem went away.

I may change it back and try it with this second parameter though as the
code was neater before.

Thanks for the reply.
 
A

Alan Silver

I think what's happening is that your first Redirect is ending the page
execution, and thus the request/response. Try passing in "false" as a
second param to Redirect to see if that helps; it tells the redirect not to
end the thread on that call. Another option, since you're within your
application, is to use Server.Transfer instead, as it's more efficient
within the app.

Thanks. See my reply to Joey ;-)
 
A

Alan Silver

I may change it back and try it with this second parameter though as
the code was neater before.

I did, and it was ;-)

Thanks again to both of you
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top