ASP.NET 网页之间传递值
如果您的應用程序從一個 ASP.NET 網頁重定向(導航)到另一個 ASP.NET 網頁,您經常希望將信息從源頁傳遞到目標頁。例如,您可能具有一個頁面,用戶可以從中選擇要購買的商品。當用戶提交該頁時,您希望調用其他頁,以處理用戶輸入的信息。
可以采用各種方式在頁之間傳遞信息,某些方式取決于重定向的方式。包括以下選項:
-
使用查詢字符串,該字符串可將信息追加到目標頁的 URL 上。使用 HyperLink 控件將導航內置于頁中時,或使用 Redirect 方法以編程方式重定向到其他頁時,都可以使用查詢字符串。
即使這些頁不在同一個 Web 應用程序中,也能使用查詢字符串傳遞值;如果要將信息傳遞到非 ASP.NET 網頁的頁中,也可以采取這種方式。如果目標頁是一個 ASP.NET 網頁,則可從 HttpRequest 對象的 QueryString 屬性中讀取查詢字符串的值。
注意: 請永遠不要使用查詢字符串傳遞敏感數據,因為查詢字符串中的信息對用戶是可見的,而且很容易被修改,因此會帶來潛在的安全風險。
-
使用會話狀態可以存儲信息,隨后可從當前應用程序的所有 ASP.NET 網頁中訪問這些信息。但是,這種方法會占用服務器內存,并且其信息將在會話過期之前一直存儲在內存中,因而與直接向下一頁傳遞信息相比,其系統開銷更大。有關詳細信息,請參見 ASP.NET 狀態管理概述。
-
在目標頁上,直接讀取源頁中的控件值和公共屬性值。此策略適用于以下兩種情況:當源頁跨頁發送到目標頁時(有關更多信息,請參見如何:將 ASP.NET 網頁發送到另一頁),以及調用 Transfer 方法在服務器上將執行從源頁轉到目標頁時。將在本主題中對從源頁直接讀取值的策略進行說明。
從源頁獲取公共屬性值
如果源頁專門設計為與目標頁共享信息,并且這兩個頁都是 ASP.NET 網頁,則可以在源頁中添加公共屬性,用于公開要在頁之間共享的信息。然后,可以在目標頁中讀取這些屬性的值。
| 僅當這兩個頁位于同一個 Web 應用程序中時,才能在目標頁中讀取源頁屬性。 |
從源頁獲取公共屬性值
在源頁中,創建一個或多個公共屬性。
下面的代碼示例演示一個名為 CurrentCity 的屬性,該屬性公開名為 textCity 的 TextBox 控件的值。
| Public ReadOnly Property CurrentCity() As StringGetReturn textCity.TextEnd Get End Property |
?
| public String CurrentCity {get{return textCity.Text;} } |
| 在源頁上創建的、主要用于為跨頁發送公開值的屬性通常是只讀屬性。盡管源頁可以包含公共讀/寫屬性,但是通過目標頁屬性設置源頁屬性一般沒有任何效果,因為不會保留此值。 |
在目標頁上,添加一個指向源頁的 @ PreviousPageType 頁面指令。
下面的代碼示例演示一個引用名為 SourcePage.aspx 的源頁的 PreviousPageType 指令。
| <%@?PreviousPageType VirtualPath="~/SourcePage.aspx" %> |
PreviousPageType 指令會導致頁的 PreviousPage 屬性被類型化為源頁類。
在目標頁代碼中,使用 PreviousPage 屬性的強類型成員讀取源代碼屬性。
下面的代碼示例讀取源頁中定義的 CurrentCity 屬性的值。
| Label1.Text = PreviousPage.CurrentCity |
?
| Label1.Text = PreviousPage.CurrentCity; |
從同一個應用程序的源頁中獲取控件信息
如果源頁和目標頁都是 ASP.NET 網頁,并且位于同一個 Web 應用程序中,則可以在目標頁中讀取源頁中的控件值。如果源頁不公開包含所需信息的公共屬性,則可以使用此策略。
從同一個應用程序的源頁中獲取控件值
-
在目標頁中,通過使用目標頁的 PreviousPage 屬性獲取對源頁的引用,然后調用 FindControl 方法獲取對所需控件的引用。
下面的代碼示例獲取源頁的 TextBox1 控件的值,并將其顯示在名為 Label1 的控件中:
Visual Basic?復制代碼 If Not Page.PreviousPage Is Nothing ThenDim SourceTextBox As TextBoxSourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _TextBox)If Not SourceTextBox Is Nothing ThenLabel1.Text = SourceTextBox.TextEnd If End If ?
C#?復制代碼 if (Page.PreviousPage != null) {TextBox SourceTextBox = (TextBox)Page.PreviousPage.FindControl("TextBox1");if (SourceTextBox != null){Label1.Text = SourceTextBox.Text;} } 注意: FindControl 方法用于查找當前命名容器中的控件。如果正在查找的控件位于其他控件中(通常位于模板中),則必須首先獲取對該容器的引用,然后搜索該容器,以查找要獲取的控件。
從其他應用程序的源頁中獲取發送信息
如果源頁和目標頁不在同一個 Web 應用程序中,則可以在目標頁中讀取源頁的發送的值。如果目標頁是 ASP.NET 網頁,但源頁不是,則也可以使用此技術。注意,只能獲取發送的值,而無法讀取頁中的任意控件的值。
從其他應用程序的源頁中獲取控件值
-
在目標頁中,讀取 Form 集合,此集合返回名稱/值對的字典(每一個發送的值對應一個名稱/值對)。
下面的代碼示例演示源頁中每個發送的控件的 ID 和值,并在名為 Label1 的標簽中顯示發送的值。
注意: ASP.NET 網頁中的發送信息包括隱藏字段的值,如 __VIEWSTATE、__EVENTTARGET 和 __EVENTARGUMENT,這些值在頁中進行內部處理時使用。下面的代碼示例排除以兩個下劃線 (__) 作為開頭命名的發送字段的值。
Visual Basic?復制代碼 Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _Handles Me.LoadDim displayValues As New StringBuilder()Dim postedValues As NameValueCollection = Request.FormDim nextKey As StringFor i As Integer = 0 To postedValues.AllKeys.Length - 1nextKey = postedValues.AllKeys(i)If nextKey.Substring(0, 2) <> "__" ThendisplayValues.Append("<br>")displayValues.Append(nextKey)displayValues.Append(" = ")displayValues.Append(postedValues(i))End IfNextLabel1.Text = displayValues.ToString() End Sub ?
C#?復制代碼 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(); }
轉載于:https://www.cnblogs.com/randomize/archive/2013/06/13/3134352.html
總結
以上是生活随笔為你收集整理的ASP.NET 网页之间传递值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P2951 [USACO09OPE
- 下一篇: asp.net ajax控件工具集 Au