當前位置:編程學習大全網 - 源碼下載 - 如何:在 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 控件的值。VBPublicReadOnlyProperty CurrentCity() AsStringGetReturn textCity.Text EndGetEndPropertyC#public String CurrentCity { get { return textCity.Text; } } 註意在源頁上創建的、主要用於為跨頁發送公開值的屬性通常是只讀屬性。盡管源頁可以包含公***讀/寫屬性,但是通過目標頁屬性設置源頁屬性壹般沒有任何效果,因為不會保留此值。在目標頁上,添加壹個指向源頁的 @ PreviousPageType 頁面指令。 下面的代碼示例演示壹個引用名為 SourcePage.aspx 的源頁的 PreviousPageType 指令。 <%@?0?2PreviousPageType VirtualPath="~/SourcePage.aspx" %> PreviousPageType 指令會導致頁的 PreviousPage 屬性被類型化為源頁類。在目標頁代碼中,使用 PreviousPage 屬性的強類型成員讀取源代碼屬性。 下面的代碼示例讀取源頁中定義的 CurrentCity 屬性的值。VB Label1.Text = PreviousPage.CurrentCity C# Label1.Text = PreviousPage.CurrentCity; 從同壹個應用程序的源頁中獲取控件信息如果源頁和目標頁都是 ASP.NET 網頁,並且位於同壹個 Web 應用程序中,則可以在目標頁中讀取源頁中的控件值。如果源頁不公開包含所需信息的公***屬性,則可以使用此策略。從同壹個應用程序的源頁中獲取控件值在目標頁中,通過使用目標頁的 PreviousPage 屬性獲取對源頁的引用,然後調用 FindControl 方法獲取對所需控件的引用。 下面的代碼示例獲取源頁的 TextBox1 控件的值,並將其顯示在名為 Label1 的控件中:VBIfNot Page.PreviousPage IsNothingThenDim SourceTextBox As TextBox SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _ TextBox) IfNot SourceTextBox IsNothingThen Label1.Text = SourceTextBox.Text EndIfEndIfC#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,這些值在頁中進行內部處理時使用。下面的代碼示例排除以兩個下劃線 (__) 作為開頭命名的發送字段的值。VBSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) _ HandlesMe.Load Dim displayValues AsNew StringBuilder() Dim postedValues As NameValueCollection = Request.Form Dim nextKey AsStringFor i AsInteger = 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)) EndIfNext Label1.Text = displayValues.ToString() EndSubC#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(); } 請參見任務如何:確定調用 ASP.NET 網頁的方式概念ASP.NET 網頁中的跨頁發送ASP.NET 狀態管理概述

  • 上一篇:圖片在線壓縮源碼-如何壓縮已上傳的服務器中的圖片,有沒有好用的php頁面源碼
  • 下一篇:T+0交易的可轉債怎麽玩?有什麽要點和訣竅?
  • copyright 2024編程學習大全網