Response.Redirect - отправляет сообщение самому себе перед перенаправлением?

Выполняется ли Response.Redirect первый PostBack на страницу, вызывающую перенаправление, до фактического перенаправления? Я так не думаю, но моя отладка показывает мне, что это так.

Я вижу, как это происходит, и это вызывает у меня проблему. Проблема вот в чем:

  1. На моей странице есть кнопка asp.net.
  2. Когда кнопка нажата, страница, конечно же, отправляется обратно. Затем в методе обработчика событий для этой кнопки вызывается следующее:

    Response.Redirect("Checkout?frpp=1"), true);
    
  3. Но я заметил, что когда вызывается перенаправление, оно сначала возвращается и достигает загрузки страницы для этой страницы, страницы, которая выполняет перенаправление. Что ж, это вызывает у меня проблемы, потому что он вызывает код, который я не хочу, чтобы он снова вызывал, например:

    если (! IsPostBackl) ShowOrderItems ();

Так что я как будто делаю второй постбэк:

  1. Первый PostBack происходит, когда вы нажимаете кнопку, попадаете в обработчик событий, запускает мой метод обработчика, который вызывает Redirect.
  2. Redirect вызывается, но он выполняет еще один PostBack на ту же страницу ... почему? Это возможно?

person PositiveGuy    schedule 10.02.2010    source источник
comment
Как ты им пользуешься? Если вы используете его, например, через событие нажатия кнопки, то перед перенаправлением произойдет обратная передача.   -  person Chad Levy    schedule 10.02.2010
comment
Я не об этом. Я знаю, что когда вы НАЖИМАЕТЕ кнопку, происходит обратная передача. Моя проблема заключается в том, ПОСЛЕ того, как происходит обратная передача, и он попадает в мой метод обработчика, и этот метод обработчика выполняет Response.Redirect на другую страницу, но кажется, что он снова попадает в page_load ЭТОЙ страницы вместо перенаправления и попадания в page_load новой страницы.   -  person PositiveGuy    schedule 10.02.2010
comment
Перед тем, как выполнить перенаправление, поток должен попасть в код Response.Redirect. Перенаправление не может происходить напрямую от клиента, если вы не используете гиперссылку. Хотя после нажатия оператора Response.Redirect поток вернется на ту же страницу, а затем выполнит перенаправление с клиента.   -  person noob.spt    schedule 10.02.2010
comment
Он попадает в код Response.Redirect. Обновлено. Посмотри на пост сейчас.   -  person PositiveGuy    schedule 10.02.2010
comment
решено. страница, на которую он собирался, перенаправлялась обратно на предыдущую страницу.   -  person PositiveGuy    schedule 10.02.2010


Ответы (2)


Response.Redirect не вызывает PostBack - он выдает HTTP 302 response, в результате чего браузер отправляет запрос на новый URL.

Response.Redirect действительно завершает текущую функцию и стек вызовов, в котором она находится - он не прерывает автоматически текущий поток. Возможно, это то, что вы видите?

person womp    schedule 10.02.2010
comment
Я не уверен, что это правильный ответ. Если вы пройдете по странице, которая использует Response.Redirect, вы увидите, что после Response.Redirect код не запускается. Согласно Microsoft (msdn.microsoft.com/ en-us / library / a8wa7sdt% 28v = vs.80% 29.aspx) Response.Redirect автоматически вызывает Response.End, который останавливает выполнение текущей страницы. - person James; 05.04.2011

Так работают кнопки ASP.Net. Они отправляют страницу обратно. Когда это происходит, сначала запускается событие загрузки страницы (ну, собственно говоря, некоторые вещи внутреннего каркаса, затем инициализация страницы, а затем загрузка страницы). После этого запустится ваш обработчик нажатия кнопки.

Мне кажется, вы ответили на свой вопрос - "if (!IsPostBack)" - это то, что нужно использовать, чтобы пропустить запуск кода загрузки страницы при ответе на сообщение.

person Ray    schedule 10.02.2010