Server.Transfer() Vs. Server.Execute()
im с путаницей, с которой лучше или эффективнее для запроса вызывающей страницы (первая страница) и страницы вызывающего абонента (новая страница)...
я замечаю, что в обоих случаях URL-адрес в браузере остается первым URL-адресом страницы (не обновляется до нового URL-адреса страницы), поскольку браузер не запрашивает этого.
любые комментарии заметны....
Ответы
Ответ 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() доступен на новой странице.
Он сохраняет серверные ресурсы, избегая этого дополнительного раунда.