將使用者重新導向至另一網頁

更新:2007 年 11 月

您通常會想要將使用者重新導向至其他網頁,做為 Web 應用程式的一部分。ASP.NET 提供下列方式,讓您將重新導向建置到 Web 網頁中:

  • 使用網頁上的超連結。

  • 設定跨網頁公佈,讓您在送出目前網頁時指定替代目的網頁。

  • 強制瀏覽器要求不同的網頁,以程式設計的方式重新導向。

  • 將控制項傳輸到同一個 Web 應用程式的不同網頁,以程式設計的方式重新導向。

這些要點分述如下。主題尾端的表格摘要說明選項,並提供方針協助您決定每個選項的使用時機。

超連結

您可以在 ASP.NET Web 網頁上使用 HTML 錨定標記 (Anchor Tag) (<a>) 來建立靜態連結,或是使用 HyperLink 控制項,以程式設計的方式控制超連結 (Hyperlink) 的連結文字和目標 URL。在這個案例中,使用者會明確按一下連結,接著瀏覽器便會傳送到目的網頁。使用 HTTP GET 命令,叫用目的網頁。因此,除非在目的網頁的 URL 上指定查詢字串,否則不會將來源網頁的相關資訊傳遞至目的網頁。如果來源和目的網頁在同一個 Web 應用程式中,則它們可使用工作階段 (Session) 狀態或應用程式狀態共用資訊。

跨網頁公佈

根據預設,ASP.NET Web 網頁中的按鈕會將網頁公佈到它本身。跨網頁公佈可讓您設定 ASP.NET Web 網頁上的按鈕,將目前網頁公佈到不同的網頁。建立多頁表單就是一個典型的例子。您可以在網頁上設定按鈕,移動到表單的下一頁和上一頁。

跨網頁公佈類似於由使用者啟始之傳輸中的超連結。不過,在跨網頁公佈時,會使用 HTTP POST 命令來叫用目的網頁,它會將來源網頁上的控制項值傳送到目的網頁。此外,如果來源和目的網頁在同一個 Web 應用程式中,則目的網頁可存取來源網頁的公用屬性。如同以往,應用程式中的所有網頁都可以共用儲存於工作階段狀態或應用程式狀態中的資訊。

如需詳細資訊,請參閱在 ASP.NET Web 網頁中跨網頁公佈HOW TO:將 ASP.NET Web 網頁張貼至不同的頁面

使用瀏覽器以程式設計的方式重新導向

您可以利用使用者的瀏覽器功能,將使用者重新導向至另一個網頁。在瀏覽器重新導向中,瀏覽器會以 HTTP GET 要求的格式向目標伺服器發出新的要求。

您可以用程式設計的方式在用戶端指令碼或伺服端程式碼中觸發重新導向。在用戶端指令碼中,假如 <form> 項目的 method 屬性值為 get,就可以呼叫 form.submit 方法。若是那樣的話,如果目前網頁有表單資料,則會將它當成查詢字串附加到要求的 URL 而傳遞到目標伺服器。

在伺服端程式碼中,可以呼叫 Redirect 方法,用程式設計的方式重新導向。這個方法會將命令傳送到使用者的瀏覽器,讓瀏覽器發出 HTTP GET 命令給目的網頁。呼叫 Redirect 方法相當於以程式設計方式按一下超連結,在當中產生對目的網頁的新要求。因為您是從自己的程式碼呼叫方法,因此可以用動態方式定義目標 URL,包括任何查詢字串資訊。如果來源和目的網頁都在同一個 Web 應用程式,則藉由加入伺服端程式碼來存放工作階段狀態中的資料,您可以共用來源和目的網頁之間的資料。

注意事項:

Internet Explorer 一直到第 6 版最多只能處理 URL 中的 2,048 個字元,包括查詢字串中的資料。如果 URL 超過 2,048 個字元,則可能會造成錯誤,或是查詢字串中的資料可能被截斷或未與要求一起傳送。在 ASP.NET Web 網頁中,含有回傳資料的 GET 要求會很容易超過 2,048 個字元,而且如果檢視狀態資訊 (其存放在隱藏的欄位) 為要求的一部分,則會造成錯誤。其他瀏覽器可能沒有這種限制。如需詳細資訊,請參閱 Microsoft 知識庫 (網址為 https://support.microsoft.com) 中的文件 208247<最大 URL 長度是在 Internet Explorer 2,083 字元>。若要解決這種嘗試共用網頁之間資訊時所發生的限制,可以使用本主題前面所討論的 HTTP POST 要求,藉以重新導向使用者。如果應用程式需要 HTTP GET 要求,您可以用其他方式存放資訊,而不要使用查詢字串,例如在工作階段狀態中。

在伺服器上以程式設計方式重新導向

您也可以在伺服器上呼叫 Transfer 方法,以程式設計的方式重新導向至目的網頁。在這個案例中,伺服器只會將目前的來源網頁內容傳輸至目的網頁。接下來會呈現目的網頁以取代來源網頁。來源和目的網頁必須在相同的 Web 應用程式。當跨網頁進行公佈時,使用 Transfer 方法的優勢是可以讓目的網頁從來源網頁中讀取控制項值和公用屬性值。

由於伺服器會發生來源和目的網頁之間的傳輸動作,因此瀏覽器沒有變更網頁的相關資訊,而且會保留原始 (來源) URL 的相關資訊。例如,Internet Explorer 中的 [網址] 方塊不會在傳輸後變更,而是會繼續顯示最近要求的網頁 URL (通常是來源網頁)。不會更新瀏覽器的記錄來反映傳輸。如果使用者重新整理瀏覽器中的網頁,或按一下瀏覽器的 [上一步] 按鈕,則這個動作會導致無法預期的行為。因此,當您想要在隱藏 URL 的情況下,利用應用程式將網頁呈現給使用者時,則呼叫 Transfer 方法是最好的策略。

選取重新導向選項

下表摘要了在網頁之間重新導向的可能方法。

策略

特性

使用方式

超連結

  • 在目的網頁上執行新要求。

  • 不要將目前網頁資訊傳遞至目的網頁。

  • 需要使用者啟始。

  • 可重新導向至任何網頁,而不只是同一個 Web 應用程式中的網頁。

  • 可讓您使用查詢字串或工作階段狀態,共用網頁之間的資訊 (HyperLink 控制項可讓您以程式設計方式建立 URL 和查詢字串)。

  • 巡覽而沒有額外處理 (如在連結的功能表或清單中)。

  • 應該由使用者控制巡覽時。

跨網頁公佈

  • 將目前網頁資訊公佈至目的網頁。

  • 公佈目的網頁中的可用資訊。

  • 需要使用者啟始。

  • 可重新導向至任何網頁,而不只是同一個 Web 應用程式中的網頁。

  • 可讓目的網頁在目的網頁和來源網頁都在同一個 Web 應用程式的情況下,讀取來源網頁的公用屬性。

  • 若要將目前網頁資訊傳遞至目的網頁 (多頁表單)。

  • 應該由使用者控制巡覽時。

瀏覽器重新導向

  • 在目的網頁上執行新的 HTTP GET 要求。

  • 將查詢字串 (如果有的話) 傳遞給目的網頁。在 Internet Explorer 中,查詢字串的大小是限制為 2,048 個字元。

  • 以程式設計和動態方式,控制目標 URL 和查詢字串。

  • 可讓您重新導向至任何網頁,而不只是同一個 Web 應用程式中的網頁。

  • 可讓您使用工作階段來共用來源和目的網頁之間的資訊。

  • 如果是條件式巡覽,則是在要控制目標 URL 和控制巡覽的發生時機時才使用。例如,如果應用程式必須根據使用者提供的資料以判斷所要巡覽的網頁,請使用此選項。

伺服器傳輸

  • 將控制項傳輸至呈現的新網頁 (取代來源網頁)。

  • 只重新導向至與來源網頁位在相同 Web 應用程式的目的網頁。

  • 可讓您從來源網頁讀取值和公用屬性。

  • 不要用目的網頁的資訊更新瀏覽器資訊。按瀏覽器中的 [重新整理] 或 [上一步] 按鈕會造成無法預期的行為。

  • 如果是條件式巡覽,則是在要控制巡覽的發生時機以及要存取來源網頁內容時使用。

  • 最適合在使用者看不到 URL 的情況下使用。

請參閱

工作

HOW TO:在 ASP.NET Web 網頁之間傳遞值

HOW TO:將 ASP.NET Web 網頁張貼至不同的頁面

HOW TO:判斷 ASP.NET Web 網頁的叫用方式

概念

ASP.NET 狀態管理概觀