Исключение прерывания потока при использовании Response.Redirect()
Я написал следующий фрагмент кода на странице, находящейся в панели обновления.
protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName =="EditNames")
{
long lSelectedName = Convert.ToInt64(e.CommandArgument);
Session["SelectedItem"] = lSelectedName;
Response.Redirect("EditItem.aspx");
}
else if (e.CommandName =="DeleteNames")
{
long lSelectedName = Convert.ToInt64(e.CommandArgument);
ValidName.DeleteItem(lSelectedName);
ScriptManager.RegisterStartupScript(this, GetType(), "Key", "alert('Name deleted sucessfully')", true);
}
}
catch (System.Threading.ThreadAbortException)
{
}
catch (Exception ex)
{
Error handling code...
}
Здесь я получаю исключение прерывания потока при перенаправлении. Как бы то ни было, я разрешил его с помощью обработчика ошибок System.threading.ThreadAbortException.
Но я не уверен, почему эта ошибка возникла при переходе. Несмотря на то, что я решил эту проблему, я хотел бы знать, есть ли какая-либо ошибка в способе кодирования или есть ли способ остановить обстрел ошибок вообще
Дайте свои входы...
Обратите внимание, что страница находится в AJAX UPDATE PANEL
Ответы
Ответ 1
Хотя я решил эту проблему, я хотел бы знать, есть ли какая-либо ошибка в способе кодирования
Не ошибся, вы сделали хорошо.
Ожидается эта ошибка. Он брошен, потому что серверный поток фактически прерван при перенаправлении. Из документации MSDN:
Если вы укажете true для параметра endResponse, этот метод вызывает метод End для исходного запроса, который генерирует исключение ThreadAbortException, когда оно завершается.
и документацию для перегрузки , которую вы используете:
Переадресация вызовов Конец, который после завершения генерирует исключение ThreadAbortException.
Ответ 2
Прочитайте эту статью - http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx
Вместо того, чтобы прекращать запрос, рекомендуется обходить конвейер выполнения запроса, вызывая Context.ApplicationInstance.CompleteRequest()
.
Итак, ваш код будет выглядеть примерно так:
Response.Redirect("TargetPage", false); //write redirect
context.ApplicationInstance.CompleteRequest(); // end response
Ответ 3
Это потому, что вы перенаправляете внутри try catch.
вам лучше не делать этого.
Ответ 4
Достаточно упомянуть ложь в методе перенаправления, например,
Response.Redirect( "TargetPage", false);