2012-02-13 5 views
17

呼び出しページ(最初のページ)と呼び出し元ページ(新しいページ)の要求に対してどちらが良いか影響があるか混乱しています...Server.Transfer()対。

私は両方のケースで、URLブラウザには最初のページのURLが残っています(新しいページのURLに更新されません)。

にかなりのコメント....

+0

http://stackoverflow.com/questions/521527/response-redirect-vs-server-transfer –

+0

@Thit - のResponse.Redirectは何か他のもの – StuartLC

+0

@ThitLwinOoで、彼はServer.Execute'対Server.Transferの 'について質問します、 'Response.Redirect vs. Server.Transfer'ではありません。 –

答えて

20

のorignal:Server.TransferをとのServer.Execute両方が従来のASP 3.0で導入され(まだASP.NETで動作)しDifference between Server.Transfer and Server.Execute

Server.Executeを使用すると、URLがパラメーターとして渡され、コントロールがこの新しいページに移動します。コードの実行は新しいページで行われます。コードの実行が終了すると、コントロールは呼び出された直後の最初のページに戻ります。しかし、Server.Transferの場合、それは非常に同じように動作します。違いは、新しいページ自体で実行が停止していることです(つまり、呼び出し元のページにコントロールが返されていないことを意味します)。

どちらの場合でも、ブラウザのURLは、ブラウザが要求していないため、最初のページURL(新しいページURLに更新しません)のままです。

2

私はこれが古いと知っていますが、Googleで検索したときに第1ヒットまたは第2ヒットとなりました。私はいくつかのテストを行い、結果を投稿したかったのです。

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ブロックの残りの部分を実行しないようにする場合は、呼び出しのすぐ下に「return」を追加する必要があります。

2

私はこれがあなた

Server.Transferをを助けるかもしれないと思う

Server.Transferのは、別のページに1ページからコントロールを転送するために使用されます。別のページでコードを実行しますが、コントロールは前のページに戻りません。 この場合、URLはブラウザで変更されません。 アプリケーションの外部ページにナビゲートすることはできません。 構文:Server.Transfer( "別のページのURL"); 新しいページの前のページコントロールにアクセスできます。 前のページ.FindControl()は新しいページで利用できます。 余分なラウンドトリップを避けることによってサーバーリソースを節約します。

のServer.Execute

のServer.Executeは、別のページ1つのページからの制御を転送するために使用されます。別のページでコードを実行し、前のページに戻るように制御します。 この場合、URLはブラウザで変更されません。 アプリケーションの外部ページにナビゲートすることはできません。 構文:Server.Execute( "別のページのURL"); 新しいページの前のページコントロールにアクセスできます。 前のページ.FindControl()は新しいページで利用できます。 余分なラウンドトリップを避けることによってサーバーリソースを節約します。