Подтвердить что ты не робот

Исключение прерывания потока при использовании 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

4b9b3361

Ответ 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);