PDA

View Full Version : مشکل با response.redirect



pedram_ns
سه شنبه 15 فروردین 1391, 18:55 عصر
سلام

یک سری کد دارم که try دستور response.redirect رو داره. و در Catch هم یک دستور redirect دیگه هست. در حالی که کد ها هیچ اروری نداره ولی باز قسمت Catch اجرا میشه.

این مشکل با کد Catch exc As Threading.ThreadAbortException حل میشه فقط مشکل من اینه که لینک ارجاعی رو از یک متغیر میخونم اینطوری:


Try
Response.Redirect(link)

Catch exc As Threading.ThreadAbortException
Response.Redirect(link)
Catch ex As Exception
Response.Redirect("Default.aspx")
End Try

و در این صورت دیگه این متغییر رو از دست میدم. راه بهتری وجود نداره؟

dorparasti
سه شنبه 15 فروردین 1391, 21:00 عصر
قبل از هرچیز کدتون بهینه نیست . باید سعی کنید طوری کد بنویسید که استفاده از try catch کمتر بشه . اما در هر حال :

استفاده از Response.Redirect باعث وقوع یک System.Threading.ThreadAbortException میشه ( یک خطا) برای همین هم است که در کد شما همیشه قسمت catch اجرا میشه . چون دارید در قسمت try یک خطا ایجاد می کنید . یک روش اینه که پارامتر دوم تابع redirect رو برابر با false قرار بدید . چون با فراخوانی redirect پردازش صفحه جاری قطع میشه که موجب همون خطای بالا میشه . با قرار دادن پارامتر دوم برابر false به سرور می گید که بعد از انتقال کاربر همچنان پردازش این صفحه رو ادامه بده . برای اجتناب از این اتفاق می تونید کد زیر رو هم بعد از redirect اضافه کنید


Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

dorparasti
سه شنبه 15 فروردین 1391, 21:09 عصر
این هم صفحه ای (http://support.microsoft.com/kb/312629) که در این باره توضیح داده