ASP.NET アプリケーションでは、ハイパーリンクの使用、Response.Redirect の使用、Server.Transfer の使用、Server.Execute の使用など、Web フォーム間を移動するさまざまな方法があります。この記事では、最適なナビゲーション方法を選択できるように、これら 4 つのナビゲーション方法の類似点、相違点、長所と短所を分析します。
1. ハイパーリンク
1 つのフォームから別のフォームに入る最も簡単な方法は、HTML ハイパーリンク コントロールを使用することです。 Web フォームでは、次のようなハイパーリンクの HTML コード クラスを使用します。
<a href="WebForm2.aspx">フォーム 2 を入力</a>
ユーザーがハイパーリンクをクリックすると、WebForm2.aspx が実行され、結果がに送信されます。ブラウザ。ハイパーリンク ナビゲーションは、HTML ページや通常の ASP ページなど、ほぼどこでも使用できます。 ASP.NET では、別の代替方法である HyperLink サーバー コントロールも提供しています。
<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat="server"
NavigateUrl="WebForm2 .aspx">Enter Form 2</asp:HyperLink>
</form>
ASP.NET は HyperLink Web サーバー コントロールを HTML スーパー リンク コントロールとして扱うため、上記の HTML コードの実行結果は最初の例と同じになります。ただし、この 2 つには重要な違いが 1 つあります。HyperLink Web サーバー コントロールはサーバー側でプログラムできます。具体的には、NavigateUrl プロパティをプログラム コードで変更できるため、アプリケーションの現在の状態に基づいて特定のターゲットを動的に変更できるハイパーリンクの構築が可能になります。次に例を示します。
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
このコードの実行後、ユーザーがリンクをクリックすると、WebForm2.aspx ではなく WebForm3.aspx が表示されます。
2. プログラムを使用してリダイレクトを制御します。
ハイパーリンクはあるページから別のページに移動できますが、このナビゲーション方法はユーザーによって完全に制御されます。場合によっては、別のページに移動するタイミングなど、ナビゲーション プロセス全体を制御するコードを使用する必要がある場合があります。このような状況において、ASP.NET には同様の目的を達成するための 3 つの異なる方法があります。それは、Response オブジェクトの Redirect メソッドを呼び出すことと、Server オブジェクトの Transfer メソッドまたは Execute メソッドを呼び出すことです。これら 3 つのナビゲーション メソッドの動作は基本的に似ていますが、相違点もあります。
2.1 Response.Redirect
Response.Redirect メソッドは、ブラウザを指定された URL にリンクさせます。 Response.Redirect() メソッドが呼び出されると、ステータス コード 302 (ターゲットが変更されたことを示す) と応答ヘッダーに新しいターゲット URL を含む応答が作成されます。ブラウザはサーバーから応答を受信し、応答ヘッダー内の情報を使用して新しい URL に対する要求を発行します。
つまり、Response.Redirect メソッドを使用する場合、リダイレクト操作はクライアント側で発生し、サーバーとの通信が合計 2 回 (2 往復) 行われます。1 つ目は元のページに対するリクエストで、 302 レスポンスと 2 回目 2 回目は、302 レスポンスで宣言された新しいページをリクエストし、リダイレクト後のページを取得します。
2.2 Server.Transfer
Server.Transfer メソッドは、現在の ASPX ファイルから同じサーバー上の別の ASPX ページに実行フローを転送します。 Server.Transfer が呼び出されると、現在の ASPX ページの実行は終了し、実行フローは別の ASPX ページに転送されますが、新しい ASPX ページは前の ASPX ページによって作成された応答ストリームを引き続き使用します。
Server.Transfer メソッドを使用してページ間を移動する場合、リダイレクトは完全にサーバー側で実行され、ブラウザーはサーバーがページ変更を実行したことを認識しないため、ブラウザーの URL は変更されません。
デフォルトでは、Server.Transfer メソッドはフォーム データやクエリ文字列をあるページから別のページに渡しませんが、メソッドの 2 番目のパラメータが True に設定されている限り、最初のページのフォーム データを保持してクエリを実行できます。弦。
同時に、Server.Transfer を使用するときに注意すべき点が 1 つあります。ターゲット ページは元のページによって作成された応答ストリームを使用するため、ASP.NET のマシン認証チェック (MAC) は新しいページの ViewState を考慮します。改ざんされています。したがって、元のページのフォーム データとクエリ文字列コレクションを保持したい場合は、ターゲット ページの Page ディレクティブの EnableViewStateMac プロパティを False に設定する必要があります。
2.3 Server.Execute
Server.Execute メソッドを使用すると、現在の ASPX ページが同じ Web サーバー上で指定された ASPX ページを実行できるようになり、指定された ASPX ページが実行されると、制御フローは元のページが Server.Execute を発行した場所に戻ります。電話。
このページ ナビゲーション メソッドは、ASPX ページの関数呼び出しに似ています。呼び出されるページは、呼び出し元ページのフォーム データおよびクエリ文字列コレクションにアクセスできるため、呼び出されるページの Page コマンドの EnableViewStateMac プロパティを False に設定する必要があります。
デフォルトでは、呼び出されたページの出力は現在の応答ストリームに追加されます。ただし、Server.Execute メソッドには、呼び出されたページの出力を、出力ストリームに直接追加するのではなく、TextWriter オブジェクト (またはそのサブオブジェクト (StringWriter オブジェクトなど)) を通じて取得できるようにするオーバーロードされたメソッドがあります。呼び出されたページの出力結果の位置を元のページ内で簡単に調整できます。
その動作プロセスを説明するために、Web フォームを作成し、ボタン コントロール (Button1) とテキスト コントロール (Literal1) を配置し、デザイン インターフェイスでコード ビューに切り替え、System.IO 名前空間の Imports ステートメントを追加してみましょう。次に、ユーザーがボタンをクリックしたときに実行されるコードを追加します。
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( "WebForm2.aspx", sw)
Literal1.Text = sw.ToString()
End Sub
次に、同じ Web アプリケーションの 2 番目のページ WebForm2.aspx を作成します。ページの HTML ビューに移動し、その Page ディレクティブを変更して ViewState チェックを無効にします。
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
再度デザイン ビューに移動し、2 番目のページにいくつかのコントロールを追加します。次に、最初のページをデフォルトのページとして設定し、アプリケーションを起動します。ボタンをクリックすると、図 1 に示すように、WebForm1 のリテラル ボタンが配置されている場所に WebForm2 のコントロールが表示されます。ページ タイトルと URL には元のページ WebForm1 が表示されたままであることに注意してください。
図 1: Server.Execute を使用して 2 つのソース ファイルをマージする
Server.Transfer メソッドまたは Server.Execute メソッドを使用してナビゲーションを実装する場合、ページが最終的に返されるため、最後のページは正当な HTML ページではない可能性があることに注意してください。クライアントには複数の <HTML> タグと <BODY> タグが含まれる場合があります。 Internet Explorer はこの状況を許容し、正しく処理しているようですが、別のブラウザを使用する場合は、慎重にテストすることをお勧めします。
3. 比較と選択
あるページから別のページに移動する方法はたくさんあるので、最適なナビゲーション方法をどのように選択すればよいでしょうか?考慮すべき要素は次のとおりです。
·いつページを切り替えるか、どのページに移動するかをユーザーに決定してもらいたい場合は、ハイパーリンクが最適です。
・プログラムで変換対象を制御したいが、変換のタイミングはユーザーが決める場合は、WebサーバーのHyperLinkコントロールを使用してNavigateUrlプロパティを動的に設定してください。
·ユーザーを別のサーバー上のリソースに接続する場合は、Response.Redirect を使用します。
· Response.Redirect を使用して、HTML ページなどの非 ASPX リソースにユーザーを接続します。
· クエリ文字列を URL の一部として保持したい場合は、Response.Redirect を使用します。
· 実行プロセスを同じ Web サーバー上の別の ASPX ページに転送する場合は、Response.Redirect ではなく Server.Transfer を使用する必要があります。Server.Transfer を使用すると、不要なネットワーク通信が回避され、パフォーマンスとブラウジング効果が向上します。
· 1 つの ASPX ページの出力結果をキャプチャし、その結果を別の ASPX ページの特定の場所に挿入する場合は、Server.Execute を使用します。
· HTML 出力が正当であることを確認したい場合は、Server.Transfer メソッドや Server.Execute メソッドを使用せず、Response.Redirect を使用してください。
この記事は次から翻訳されています: http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html