Share via


ユーザーをほかのページへリダイレクトする

更新 : 2007 年 11 月

Web アプリケーションに含まれる他のページに、ユーザーをリダイレクトすることが必要になる場合があります。ASP.NET では、次の方法によって Web ページへのリダイレクトを作成できます。

  • ページでハイパーリンクを使用する。

  • ページ間ポスティングを構成する。ページ間ポスティングを使用すると、現在のページの送信時に、代替のターゲット ページを指定できます。

  • ブラウザから別のページを強制的に要求するように、プログラムによってリダイレクトする。

  • 同じ Web アプリケーションに含まれる別のページに制御を移すように、プログラムによってリダイレクトする。

上記のそれぞれの方法について、以下に説明します。このトピックの最後にある表に、これらの方法がまとめられています。この表を使用するリダイレクト方法を選択する際のガイドラインとして使用してください。

ハイパーリンク

ASP.NET Web ページで HTML アンカー タグ (<a>) を使用して、静的リンクを作成できます。また、HyperLink コントロールを使用すると、ハイパーリンクのリンク テキストとターゲット URL をプログラムによって制御することもできます。このシナリオでは、ユーザーがリンクを明示的にクリックすると、ブラウザがターゲット ページに転送します。ターゲット ページは、HTTP GET コマンドによって呼び出されます。したがって、ターゲット ページの URL にクエリ文字列を指定しない限り、ソース ページに関する情報はターゲット ページには渡されません。ソース ページとターゲット ページが同じ Web アプリケーションに含まれる場合は、セッション状態かアプリケーション状態を使用して情報を共有できます。

ページ間ポスティング

既定では、ASP.NET Web ページのボタンは、ページをそのページ自体にポストします。ページ間ポスティングを使用すると、現在のページを別のページにポストするように ASP.NET Web ページ上のボタンを構成できます。一般的な例として、マルチページ フォームを作成する場合が挙げられます。フォームの次のページ、および前のページに移動するようにページ上のボタンを構成できます。

ページ間ポスティングは、転送がユーザー アクションによって開始されるという点でハイパーリンクに似ています。ただし、ページ間ポスティングでは、ターゲット ページは HTTP POST コマンドによって呼び出されます。このコマンドは、ソース ページのコントロールの値をターゲット ページに送信します。さらに、ソース ページとターゲット ページが同じ Web アプリケーションに含まれている場合には、ターゲット ページはソース ページのパブリック プロパティにもアクセスできます。この場合も、アプリケーション内のすべてのページは、セッション状態またはアプリケーション状態に格納された情報を共有できます。

詳細については、「ASP.NET Web ページにおけるページ間ポスティング」および「方法 : ASP.NET Web ページを別のページにポストする」を参照してください。

ブラウザを使用したプログラムによるリダイレクト

ユーザーのブラウザの機能を使用して、ユーザーを別のページにリダイレクトできます。ブラウザのリダイレクト時、新しい要求は HTTP GET 要求の形式でターゲット サーバーに対して発行されます。

クライアント スクリプトまたはサーバー コードのプログラムでリダイレクトをトリガできます。クライアント スクリプトで、<form> 要素の method 属性値が get の場合、form.submit メソッドを呼び出すことができます。このとき、現在のページにフォーム データが含まれる場合、要求される URL にクエリ文字列として付加することでターゲット サーバーに渡されます。

サーバー コードでは、プログラムで Redirect メソッドを呼び出すことでリダイレクトできます。このメソッドは、ターゲット ページに対して HTTP GET コマンドを発行するようにユーザーのブラウザにコマンドを送信します。サーバーの Redirect メソッドを呼び出すと、ターゲット ページに対する新しい要求が実行されるという点で、プログラム上ではハイパーリンクをクリックすることと同じです。独自のコードからメソッドを呼び出すため、クエリ文字列情報を含むターゲット URL を動的に定義できます。ソース ページとターゲット ページが同じ Web アプリケーションに含まれている場合は、セッション状態にデータを格納するサーバー コードを追加することによって、ソース ページとターゲット ページでデータを共有できます。

x3x8t37x.alert_note(ja-jp,VS.90).gifメモ :

バージョン 6.0 までの Internet Explorer は、クエリ文字列のデータを含め、URL の 2,048 文字までしか処理できません。URL が 2,048 文字を超える場合、エラーが発生したり、クエリ文字列のデータが切り捨てられたり、要求と共に送信されなかったりします。ASP.NET Web ページでは、ビューステート情報 (非表示のフィールドに格納されます) が要求に含まれる場合、post データを含む GET 要求が 2,048 文字を超えることはよくあります。この場合、エラーが発生します。他のブラウザにはこのような制約はありません。詳細については、https://support.microsoft.com にある Microsoft サポート技術情報の文書 208427「[IE] URL に使用可能な文字数は最大 2,083 文字」を参照してください。複数のページで情報を共有するときにこの制約に対応するには、このトピックの説明に従って HTTP POST 要求を使用してユーザーをリダイレクトします。アプリケーションで HTTP GET 要求が必要な場合、クエリ文字列を使用しなくても、セッション状態など他の方法で情報を格納できます。

サーバー上でのプログラムによるリダイレクト

Transfer メソッドを呼び出すことにより、サーバー上でターゲット ページをプログラムによってリダイレクトすることもできます。このシナリオでは、サーバーは現在のソース ページのコンテキストをターゲット ページに転送するだけです。ターゲット ページは、ソース ページの埋め込み先に表示されます。ソース ページとターゲット ページは、同じ Web アプリケーションに含まれている必要があります。ページ間ポスティングと同様に、Transfer メソッドには、ターゲット ページがソース ページのコントロールの値とパブリック プロパティの値を読み取ることができるという利点があります。

ソース ページとターゲット ページ間の転送はサーバー上で行われるため、ブラウザは変更されたページに関する情報を持たず、元の (ソース) URL に関する情報が保持されます。たとえば、Internet Explorer の [アドレス] ボックスが転送後に変更されることはなく、代わりに最後に要求したページ (通常はソース ページ) の URL が引き続き表示されます。転送を反映するようブラウザの履歴が更新されることはありません。これは、ユーザーがブラウザのページを再表示したり、ブラウザの [戻る] ボタンをクリックしたりした場合に、予測できない動作につながる可能性があります。したがって、Transfer メソッドの呼び出しは、URL を非表示にした状態でユーザーにページを提示するアプリケーションで使用する場合に最適な方法です。

リダイレクト オプションの選択

次の表に、ページ間のリダイレクトに使用できる方法をまとめます。

方法

特性

使用方法

ハイパーリンク

  • ターゲット ページで新しい要求を実行します。

  • 現在のページの情報をターゲット ページに渡しません。

  • ユーザーによる操作が必要です。

  • 同じ Web アプリケーション内のページだけでなく、どのページにでもリダイレクトします。

  • クエリ文字列またはセッション状態を使用して、ページ間で情報を共有できます (HyperLink コントロールを使用すると、URL とクエリ文字列をプログラムによって作成できます)。

  • 追加の処理を行わずに移動する場合 (メニューやリンクのリストなど)。

  • ユーザー コントロールに従って移動する場合。

ページ間ポスティング

  • 現在のページの情報をターゲット ページにポストします。

  • ターゲット ページでポスト情報を使用できるようにします。

  • ユーザーによる操作が必要です。

  • 同じ Web アプリケーション内のページだけでなく、どのページにでもリダイレクトします。

  • ページが同じ Web アプリケーション内にある場合、ターゲット ページはソース ページのパブリック プロパティを読み取ることができます。

  • 現在のページの情報をターゲット ページに渡す場合 (マルチページ フォームなど)。

  • ユーザー コントロールに従って移動する場合。

ブラウザによるリダイレクト

  • ターゲット ページで新しい HTTP GET 要求を実行します。

  • クエリ文字列があれば、ターゲット ページに渡します。Internet Explorer では、クエリ文字列のサイズは 2,048 文字に制限されています。

  • ターゲット URL とクエリ文字列に対して、プログラムによるダイナミック コントロールを行うことができます。

  • 同じ Web アプリケーション内のページだけでなく、どのページにでもリダイレクトできます。

  • セッション状態を使用してソース ページとターゲット ページで情報を共有できます。

  • 条件付き移動の場合 (ターゲット URL とコントロールを制御する必要があるときに移動を行う場合)。たとえば、ユーザーが入力したデータに基づいて、アプリケーションが移動先のページを判断する必要がある場合に、このオプションを使用します。

サーバーによる転送

  • ソース ページの埋め込み先に表示する新しいページに制御を移します。

  • ソース ページと同じ Web アプリケーション内にあるターゲット ページにのみリダイレクトします。

  • ソース ページから値とパブリック プロパティを読み取ることができます。

  • ターゲット ページに関する情報によってブラウザ情報を更新しません。ブラウザの [更新] または [戻る] が押された場合に、予測できない動作につながる可能性があります。

  • 条件付き移動の場合 (移動するタイミングを制御したり、ソース ページのコンテキストにアクセスしたりする必要がある場合)。

  • ユーザーに対して URL を非表示にする場合に使用するのが最も適しています。

参照

処理手順

方法 : ASP.NET Web ページ間で値をやり取りする

方法 : ASP.NET Web ページを別のページにポストする

方法 : ASP.NET Web ページが呼び出された方法を確認する

概念

ASP.NET の状態管理の概要