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

Server.Transfer() Vs. Server.Execute()

im с путаницей, с которой лучше или эффективнее для запроса вызывающей страницы (первая страница) и страницы вызывающего абонента (новая страница)...

я замечаю, что в обоих случаях URL-адрес в браузере остается первым URL-адресом страницы (не обновляется до нового URL-адреса страницы), поскольку браузер не запрашивает этого.

любые комментарии заметны....

4b9b3361

Ответ 1

Оригинал на: Разница между Server.Transfer и Server.Execute

Server.Transfer и Server.Execute были представлены в классическом ASP 3.0 (и все еще работают в ASP.NET).

При использовании Server.Execute URL-адрес передается ему в качестве параметра, и элемент управления перемещается на эту новую страницу. Выполнение кода происходит на новой странице. Как только выполнение кода заканчивается, элемент управления возвращается на начальную страницу сразу после того, где он был вызван. Тем не менее, в случае Server.Transfer, он работает практически так же, с той разницей, что выполнение останавливается на самой новой странице (значит, элемент управления не возвращается на вызывающую страницу).

В обоих случаях URL-адрес в браузере остается URL-адресом первой страницы (не обновляется до URL-адреса новой страницы), поскольку браузер не запрашивает это.

Ответ 2

Я знаю, что это старо, но это явилось первым или вторым ударом, когда я искал в Google. Я провел некоторое тестирование и хотел опубликовать результаты.

Я создал сайт с 2 страницами. Загрузка страницы на 1-ю страницу содержала код.

try {
    //Response.Redirect("~/WebForm2.aspx");
    //Server.Transfer("~/WebForm2.aspx");
    //Server.Execute("~/WebForm2.aspx");
    //Server.TransferRequest("~/WebForm2.aspx");

    string strTry = "Try";
} catch (Exception ) {
    string strCatch = "Catch";
} finally {
    string strFinally = "Finally";
}

Последовательность того, что она сделала для каждого, действительно интересна...

Command            Sequence               
Redirect           Call, Catch (ThreadAbortException), Finally, Load Page 2
Transfer           Call, Load Page 2, Catch (ThreadAbortException), Finally
Execute            Call, Load Page 2, Try (continues), Finally
TransferRequest    Call, Try (continues), Finally, Load Page 2

.. Это может помочь узнать, какой порядок вам нравится.

Лично мне нравится идея завершения текущего кода, ПЕРЕД следующим кодом страницы. Таким образом, либо Redirect, либо TransferRequest, хотя с последним вам может потребоваться добавить "возврат" чуть ниже вашего вызова, если вы действительно намеревались не выполнять оставшуюся часть блока try.

Ответ 3

Я думаю, это может помочь вам

Server.Transfer

Server.Transfer используется для передачи управления с одной страницы на другую. Управляйте исполнением кода на другой странице, но управление не возвращается на предыдущую страницу. В этом случае URL-адрес не изменяется в браузере. он не может перемещаться по внешним страницам приложения. Синтаксис: Server.Transfer( "URL другой страницы" ); Он может получить доступ к предыдущей странице управления на новой странице. ПредыдущийPage.FindControl() доступен на новой странице. Он сохраняет серверные ресурсы, избегая этого дополнительного раунда.

Server.Execute

Server.Execute используется для передачи управления с одной страницы на другую. Управляйте исполнением кода на другой странице и возвращайтесь на предыдущую страницу. В этом случае URL-адрес не изменяется в браузере. он не может перемещаться по внешним страницам приложения. Синтаксис: Server.Execute( "URL другой страницы" ); Он может получить доступ к предыдущей странице управления на новой странице. ПредыдущийPage.FindControl() доступен на новой странице. Он сохраняет серверные ресурсы, избегая этого дополнительного раунда.