共用方式為


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

更新:2007 年 11 月

如果應用程式從一個 ASP.NET Web 網頁重新導向 (巡覽) 到另一個,您會經常想要從來源網頁傳遞資訊至目標網頁。例如,您有一個使用者能夠選取購買項目的網頁。當使用者送出網頁時,您想要呼叫能夠處理使用者輸入資訊的其他網頁。

您可以使用各種方法在網頁之間傳遞資訊,某些方法會取決於重新導向發生的方式。包括下列選項:

  • 使用查詢字串,此方法將資訊附加至目標網頁的 URL 之後。當使用 HyperLink 控制項建置網頁巡覽,或是使用 Redirect 方法以程式設計方式重新導向至其他網頁時,就可以使用查詢字串。

    即使網頁不在相同的 Web 應用程式中,在查詢字串中傳遞值仍然能夠發揮作用。如果您想要將資訊傳遞至並非 ASP.NET 網頁的網頁,這個方法也能發揮作用。如果目標網頁是 ASP.NET Web 網頁,您可以從 HttpRequest 物件的 QueryString 屬性讀取查詢字串的值。

    注意事項:

    永遠不要使用查詢字串傳遞敏感資料,因為使用者可以看到資訊並且容易修改,所以表示有潛在的安全性風險。

  • 使用工作階段狀態儲存資訊,則目前應用程式中的所有 ASP.NET Web 網頁都可以存取它。然而,這麼做會佔用伺服器記憶體,而且會儲存資訊直到工作階段結束,這可能會超出只將資訊傳遞至下一個網頁所需的負荷量。如需詳細資訊,請參閱 ASP.NET 狀態管理概觀

  • 在目標網頁上,直接從來源網頁讀取控制項和公用屬性的值。在兩種情況下可以使用這個策略:當來源網頁跨張貼至目標網頁時 (如需詳細資訊,請參閱 HOW TO:將 ASP.NET Web 網頁張貼至不同的頁面),以及當您呼叫 Transfer 方法以執行由來源傳輸至伺服器上的目標網頁時。本主題會說明直接從來源網頁讀取值的策略。

從來源網頁取得公用屬性值

如果您特別設計可與目標網頁共用資訊的來源網頁,並且兩個網頁都是 ASP.NET Web 網頁,在來源網頁中您可以加入公開網頁之間共用資訊的公用屬性。然後就能夠在目標網頁中讀取屬性值。

注意事項:

只有在兩個網頁都位於相同的 Web 應用程式中時,才能夠在目標網頁中讀取來源網頁的屬性。

若要從來源網頁取得公用屬性值

  1. 在來源網頁上建立一或多個公用屬性。

    下列程式碼範例示範了名為 CurrentCity 的屬性,其會公開名為 textCity 的 TextBox 控制項的值。

    Public ReadOnly Property CurrentCity() As String
        Get
            Return textCity.Text
        End Get
    End Property
    
    public String CurrentCity
    {
        get
        {
            return textCity.Text;
        }
    }
    
    注意事項:

    在來源網頁上的屬性,如果主要是為了公開跨網頁張貼的值而建立,則通常是唯讀屬性。雖然來源網頁能夠包含公用讀取/寫入屬性,但是從目標網頁屬性設定來源網頁屬性通常沒有效用,因為並不會保存值。

  2. 在目標網頁上加入指向來源網頁的 @ PreviousPageType 網頁指示詞。

    下列程式碼範例,示範了參考名為 SourcePage.aspx 來源網頁的 PreviousPageType 指示詞。

    <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
    

    PreviousPageType 指示詞會導致網頁的 PreviousPage 屬性型別成為來源網頁類別。

  3. 在目標網頁程式碼中,使用 PreviousPage 屬性的強型別成員讀取原始程式碼屬性。

    下列程式碼範例會讀取來源網頁中定義的 CurrentCity 屬性值。

    Label1.Text = PreviousPage.CurrentCity
    
    Label1.Text = PreviousPage.CurrentCity;
    

從相同應用程式的來源網頁中取得控制項資訊

如果來源和目標網頁都是 ASP.NET Web 網頁,並且位於相同的 Web 應用程式中,當您在目標網頁時可以讀取來源網頁上控制項的值。如果來源網頁並未公開包含所需資訊的公用屬性,您就可以使用這個策略。

若要從相同應用程式的來源網頁中取得控制項的值

  • 在目標網頁上,使用目標網頁的 PreviousPage 屬性取得來源網頁的參考,然後呼叫 FindControl 方法取得想要的控制項參考。

    下列程式碼範例取得來源網頁 TextBox1 控制項的值,然後將其顯示在名為 Label1 的控制項中:

    If Not Page.PreviousPage Is Nothing Then
        Dim SourceTextBox As TextBox
        SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
            TextBox)
        If Not SourceTextBox Is Nothing Then
            Label1.Text = SourceTextBox.Text
        End If
    End If
    
    if (Page.PreviousPage != null)
    {
        TextBox SourceTextBox = 
            (TextBox)Page.PreviousPage.FindControl("TextBox1");
        if (SourceTextBox != null)
        {
            Label1.Text = SourceTextBox.Text;
        }
    }
    
    注意事項:

    FindControl 方法會在目前命名容器中尋找控制項。如果您尋找的控制項在其他控制項中 (通常是在範本中),您必須先取得容器的參考,然後搜尋容器以便尋找想要取得的控制項。

從其他應用程式的來源網頁中取得張貼資訊

如果來源和目標網頁不在相同的 Web 應用程式中,您可以在目標網頁中讀取來源網頁的張貼值。如果目標網頁是 ASP.NET Web 網頁但來源網頁不是,這項技術仍然有作用。請注意您只能夠取得張貼值,而無法讀取網頁上任意控制項的值。

若要從其他應用程式的來源網頁中取得控制項的值

  • 在目標網頁上,讀取 Form 集合,此集合會傳回名稱/值組的字典,每個張貼值有一個名稱/值組。

    下列程式碼範例,示範了來源網頁中每個張貼控制項的 ID 和值,並且將張貼值顯示在名為 Label1 的標籤中。

    注意事項:

    來自 ASP.NET Web 網頁的張貼資訊包含隱藏欄位的值,例如 __VIEWSTATE、__EVENTTARGET 和 __EVENTARGUMENT,這是用在網頁的內部處理中。下列程式碼範例排除使用前置雙底線 (__) 命名的張貼欄位值。

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        Dim displayValues As New StringBuilder()
        Dim postedValues As NameValueCollection = Request.Form
        Dim nextKey As String
        For i As Integer = 0 To postedValues.AllKeys.Length - 1
            nextKey = postedValues.AllKeys(i)
            If nextKey.Substring(0, 2) <> "__" Then
                displayValues.Append("<br>")
                displayValues.Append(nextKey)
                displayValues.Append(" = ")
                displayValues.Append(postedValues(i))
            End If
        Next
        Label1.Text = displayValues.ToString()
    End Sub
    
    void Page_Load(object sender, EventArgs e)
    {
        System.Text.StringBuilder displayValues = 
            new System.Text.StringBuilder();
        System.Collections.Specialized.NameValueCollection 
            postedValues = Request.Form;
        String nextKey;
        for(int i = 0; i < postedValues.AllKeys.Length - 1; i++)
        {
            nextKey = postedValues.AllKeys[i];
            if(nextKey.Substring(0, 2) != "__")
            {
                displayValues.Append("<br>");
                displayValues.Append(nextKey);
                displayValues.Append(" = ");
                displayValues.Append(postedValues[i]);
            }
        }
       Label1.Text = displayValues.ToString();
    }
    

請參閱

工作

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

概念

在 ASP.NET Web 網頁中跨網頁公佈

ASP.NET 狀態管理概觀