自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談ASP.NET功能之跨頁提交

開發(fā) 后端
ASP.NET功能有所擴展,能夠允許跨頁提交。標準HTML表單(form元素)允許你向另外一個頁面或者應用程序傳遞和發(fā)送數(shù)據(jù)信息,方法是使用表單元素。在ASP.NET 1.x中,網(wǎng)頁則利用投遞機制,把頁面數(shù)據(jù)提交給該頁本身。下面就讓我們來探討這個新特性。

傳統(tǒng)辦法

為了便于比較,我們來回顧網(wǎng)頁傳遞數(shù)據(jù)的老方法。HTML的表格元素有一個action(動作)屬性,用來指定服務器端哪項資源(所謂資源,是指一個網(wǎng)頁、一段腳本、程序等)來處理這些提交的數(shù)據(jù)。下面的代碼便是一個樣例。

以下是ASP.NET功能引用片段:

  1. <html>    
  2. <head><title>Sample HTML form</title></head>    
  3. <body>    
  4. <form name="frmSample" method="post" action="target_url">    
  5. <input type="text" name="fullname" id="fullname" />    
  6. <input type="button" name="Submit" value="submit" />    
  7. </form>    
  8. </body> 
  9. </html>   

在文本域(名字是fullname)中輸入的值將被提交給表單元素的action屬性指定的頁面或者程序。對于ASP.NET開發(fā)者,即使曾經(jīng)用過標準HTML表單,也是極不多見的。

ASP.NET開發(fā)者面對要從一個網(wǎng)頁向另一個網(wǎng)頁傳遞數(shù)據(jù)信息的任務時,方法選擇的余地是異常廣闊的。它們包括會話變量(session variables)、cookies、querystring 變量、caching(網(wǎng)頁緩存),甚至Server.Transfer方法,但是ASP.NET 2.0還提供了另外一種選擇。

ASP.NET 2.0提供的又一辦法

在設(shè)計ASP.NET 2.0的時候,微軟認識到了在網(wǎng)頁間交叉?zhèn)鬟f數(shù)據(jù)的需求。有了這個意識之后,就為ASP.NET的button(按鈕)控件增加了一項PostBackUrl屬性。它允許你在用戶提交的時候,指明這張表單和上面的數(shù)據(jù)送往何方(也就是由PostBackUrl屬性指定的URL值確定)。一般來講,跨頁傳遞是客戶端在后臺使用JavaScript進行傳送的過程。

以下是ASP.NET功能引用片段:

  1. <%@ Page language="vb" %>   
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >   
  3. <html><head>   
  4. <title>Cross Postback Example</title>   
  5. </head><body>   
  6. <form id="frmCrossPostback1" method="post" runat="server">   
  7. <asp:Label ID="lblName" runat="server" Text="Name:"></asp:Label>   
  8. <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />   
  9. <asp:Label ID="lblE-mailAddress" runat="server" Text="E-mail:"></asp:Label>   
  10. <asp:TextBox ID="txtE-mailAddress" runat="server"></asp:TextBox><br />    
  11. <asp:Button ID="btnSubmit" runat="server" Text="Submit" PostBackUrl="CrossPostback2.aspx" />   
  12. </form>   
  13. </body>   
  14. </html>  

ASP.NET頁面擁有兩個文本域(分別表示name(名字)和e-mail(電子郵件)),以及一個用來提交數(shù)據(jù)的button(按鈕)。這個提交按鈕的PostBackUrl屬性被指定為另外一個網(wǎng)頁,這樣使得表單提交的時候,數(shù)據(jù)可以發(fā)送到那個頁面。注意:這個例子中,表單元素通過設(shè)置method(方法)屬性,讓表單提交時采用post[2]提交方式,但這不是必要的,因為所有cross postback(跨頁投遞)根據(jù)設(shè)計均使用post方法。

使用先前頁面

ASP.NET頁面經(jīng)由跨頁投遞的調(diào)用而載入的時候,它上面的對象的IsPostBack屬性不會被觸發(fā)。不過,有一項叫做PreviousPage(前一頁)的屬性使你能夠訪問和使用那些應用跨頁投遞的頁面。

每當一個跨頁請求發(fā)生時,當前頁的PreviousPage屬性就把促發(fā)投遞的頁面引用保存下來。如果頁面的產(chǎn)生不是來自跨頁投遞的激發(fā),或者說頁面處于不同的程序組,那么PreviousPage屬性將不會被初始化。

你可以通過檢查PreviousPage對象來確定頁面的載入是否為跨頁投遞的結(jié)果。值如果為null,則說明是普通的載入,而非null值則表明網(wǎng)頁來自跨頁投遞。此外,頁面類(Page class)還包含了一個稱作IsCrossPagePostBack的方法(method),專門用來確定頁面是不是跨頁投遞的結(jié)果。

一旦確定發(fā)生了跨頁投遞,你就可以通過PreviousPage對象的FindControl方法去訪問調(diào)用頁(calling page)上的控件。下面的代碼是我們例子中的第二頁;它由前面列出的頁面所調(diào)用。

以下是ASP.NET功能引用片段:

  1. <%@ Page language="vb" %>   
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >   
  3. <html><head>   
  4. <title>Cross Postback Example 2</title>   
  5. </head><body>   
  6. <script language="vb" runat="server">   
  7. Sub Page_Load()   
  8. If Not (Page.PreviousPage Is Nothing) Then   
  9. If Not (Page.IsCrossPagePostBack) ThenResponse.Write("Name:" + CType(PreviousPage.FindControl("txtName"), TextBox).Text + "<BR>")Response.Write("E-mail:" + CType(PreviousPage.FindControl("txtE-mailAddress"), TextBox).Text + "<BR>")    
  10. End If   
  11. End If   
  12. End Sub   
  13. </script>   
  14. </body>   
  15. </html>  

這個頁先判斷它是不是由跨頁投遞所調(diào)用。如果是,就通過FindControl方法訪問來自調(diào)用頁的數(shù)值,并把用此方法得到的控件轉(zhuǎn)換為TextBox控件,然后顯示它們的Text(文本)屬性的內(nèi)容。

你可以把整個PreviousPage對象轉(zhuǎn)換成觸發(fā)跨頁投遞的頁面類型。這個方法允許你訪問頁面的全局屬性(public properties)和方法。下面代碼是添加了兩個屬性的***個清單,這兩個屬性用于訪問域值。

以下是引用片段:

  1. <%@ Page language="vb" %>   
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >   
  3. <html><head>   
  4. <title>Cross Postback Example</title>   
  5. <script language="vb" runat="server">   
  6. Public ReadOnly Property Name   
  7. Get   
  8. Return Me.txtName.Text   
  9. End Get   
  10. End Property   
  11. Public ReadOnly Property E-mailAddress   
  12. Get   
  13. Return Me.txtE-mailAddress.Text   
  14. End Get   
  15. End Property   
  16. </script></head><body>   
  17. <form id="frmCrossPostback1" method="post" runat="server">   
  18. <asp:Label ID="lblName" runat="server" Text="Name:"></asp:Label>    
  19. <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />   
  20. <asp:Label ID="lblE-mailAddress" runat="server" Text="E-mail:"></asp:Label>   
  21. <asp:TextBox ID="txtE-mailAddress" runat="server"></asp:TextBox><br />   
  22. <asp:Button ID="btnSubmit" runat="server" Text="Submit" PostBackUrl="CrossPostback2.aspx" />   
  23. </form>   
  24. </body>   
  25. </html>  

既然現(xiàn)在屬性已經(jīng)建好,那你就能很容易訪問它們。要警惕的是,Page類的PreviousPage對象必須轉(zhuǎn)換成正確的類型,這樣才能正確訪問它的屬性。這可以通過把它轉(zhuǎn)換成合適的page類別的對象加以實現(xiàn)。

以下是引用片段:

  1. <%@ Page language="vb"%>   
  2. <%@ Reference Page="~/CrossPostback1.aspx" %>   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >   
  4. <html>   
  5. <head>   
  6. <title>Cross Postback Example 3</title>   
  7. </head><body>   
  8. <script language="vb" runat="server">   
  9. Sub Page_Load()   
  10. Dim cppPage As CrossPostback1_aspx   
  11. If Not (Page.PreviousPage Is Nothing) Then   
  12. If Not (Page.IsCrossPagePostBack) Then   
  13. If (Page.PreviousPage.IsValid) ThencppPage = CType(PreviousPage, CrossPostBack1_aspx)Response.Write("Name:" + cppPage.Name + "<br>")Response.Write("E-mail:" + cppPage.E-mailAddress)    
  14.  
  15. End If   
  16. End If   
  17. End If   
  18. End Sub   
  19. </script>   
  20. </body>   
  21. </html>  

說明了這一點,它在頁面頭部定義了調(diào)用頁的一項引用,那樣這個引用類型就能在代碼中使用。通過這項引用,實際的VB.NET代碼使用CType函數(shù)把PreviousPage對象轉(zhuǎn)換成了適當?shù)念愋?。這之后,那些屬性就可以像代碼示范的那樣使用了。

關(guān)于上述清單中PreviousPage對象IsValid方法的使用在此提醒一下:前頁的IsValid屬性保證你對它操作之前,它已通過所有合法驗證測試。

ASP.NET功能總結(jié)

在網(wǎng)頁間傳遞數(shù)據(jù)參數(shù)有很多項應用,包括保持個人用戶信息。祖?zhèn)鞯木W(wǎng)頁解決方案,像使用querystring和cookies,允許你很容易當提交發(fā)生時從一個頁面指向另一個頁面。

ASP.NET 1.1除了提供額外方法外,對這些方法也能很好地支持,可是,ASP.NET 2.0依靠跨頁投遞,使這方面又有了長足發(fā)展。它讓一個網(wǎng)頁處理來自另一網(wǎng)頁的數(shù)據(jù)變得簡單。在你開發(fā)你的下一個ASP.NET 2.0程序的時候,可要好好利用這個新概念的優(yōu)勢啊。

【編輯推薦】

  1. ASP.NET環(huán)境下的Shell函數(shù)
  2. 在ASP.NET中向數(shù)據(jù)庫批量插入數(shù)據(jù)
  3. ASP.NET用Post方式向網(wǎng)頁發(fā)送數(shù)據(jù)
  4. ASP.NET 2.0部署WEB應用程序淺析
  5. ASP.NET中的HttpWorkerRequest對像
  6. ASP.NET 2.0中的OWC組件前夕
責任編輯:彭凡 來源: Levelup
相關(guān)推薦

2009-07-22 18:08:00

ASP.NET跨頁提交

2009-07-24 10:52:42

ASP.NET ISA

2009-07-22 16:11:43

ASP.NET AJA

2009-07-20 15:30:11

ASP.NET應用

2009-08-03 18:47:12

ASP.NET數(shù)據(jù)緩存

2009-07-28 17:17:19

ASP.NET概述

2009-08-05 15:29:33

ASP.NET For

2009-07-23 15:44:39

ASP.NET MVC

2009-07-28 17:49:30

ASP.NET定期回收

2009-07-20 17:12:17

ASP.NET訪問數(shù)據(jù)

2009-07-28 16:03:23

ASP.NET狀態(tài)服務

2009-08-10 10:19:47

ASP.NET組件設(shè)計

2009-07-22 13:24:24

ASP.NET MVC

2009-07-23 15:24:37

ASP.NET Ima

2011-08-23 10:58:59

2009-07-21 14:16:02

ASP.NET管道優(yōu)化

2009-07-27 16:19:59

ASP.NET報表控件

2009-07-28 17:34:28

ASP.NET XML

2009-09-09 12:35:00

ASP.NET回車提交回車提交事件

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號