2013-12-14 4 views
6

У меня есть Response.Redirect в моем Page_Load:Response.Redirect в Page_Load

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ...Code 
    Response.Redirect("http://www.mysite.com") 
End Sub 

У меня есть другие Подпрограммы с рабочим кодом перед добавлением Response.Redirect

Когда Response.Redirect добавляют все, что они делают не процесс их код и автоматически выполнить сайт Response.Redirect.

Мой код работает, когда нет Response.Redirect.

+1

Какой код вы пытаетесь выполнить? «Response.Redirect» сообщит браузеру запрашивать данную страницу/сайт. Если вы не храните его где-нибудь, следующая страница не будет знать, что вы сделали в памяти. – pickypg

+0

один метод, скомпилированный на сервере, а затем ответ клиенту. затем код в загрузке страницы скомпилирован, а затем перенаправляется на другую страницу. –

+0

Что заставляет вас думать, что «Когда добавлен Response.Redirect, все они не обрабатывают свой код»? –

ответ

8

Использование

Response.Redirect("http://www.mysite.com", false) 

второй параметр указывает ли выполнение текущей страницы следует прекратить или нет.

если вы используете Response.Redirect("http://www.mysite.com"), текущее выполнение страницы прекращается

6

Пожалуйста, используйте

Response.Redirect("http://example.com", false) 

По PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer:

Если вы используете Response.End, Response.Redirect, или Server.Transfer , возникает исключение ThreadAbortException. Вы можете использовать оператор try-catch , чтобы поймать это исключение.

Response.End метод завершает выполнение страницы и сдвигает выполнение в случае Application_EndRequest в трубопроводе событий приложения. Строка кода, которая следует за Response.End, не выполнена .

Эта проблема возникает в Response.Redirect и Server.Transfer методы, поскольку оба метода называют response.end внутри.

Чтобы обойти эту проблему, используйте один из следующих способов:

Для Response.End, вызовите метод HttpContext.Current.ApplicationInstance.CompleteRequest вместо Response.End для обхода выполнения кода в событие Application_EndRequest.

Для Response.Redirect, используйте перегрузку, Response.Redirect (String URL, BOOL endResponse), который проходит ложно для параметра endResponse , чтобы подавить внутренний вызов Response.End. Например: Response.Redirect ("nextpage.aspx", false); Если вы используете это обходное решение, выполняется код, следующий за Response.Redirect. Для Server.Transfer используйте вместо этого метод Server.Execute.

+0

Как ваш ответ отличается от ответа Дамита? – afzalulh

+0

Да, просто не повторяйте одно и то же. Перед тем, как ответить, проверьте, что кто-то уже опубликовал это. Если бы я был вами, я удалил бы свой ответ и отвечу на другой ответ. – afzalulh

Смежные вопросы