偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ASP.NET跨頁(yè)提交功能詳解

開(kāi)發(fā) 后端
本文向您提交AP.NET跨頁(yè)提交的方法,作者根據(jù)自己的經(jīng)驗(yàn)提供了傳統(tǒng)ASP.NET跨頁(yè)提交和另一種解決問(wèn)題的思路。

標(biāo)準(zhǔn)HTML表單(form元素)允許你向另外一個(gè)頁(yè)面或者應(yīng)用程序傳遞和發(fā)送數(shù)據(jù)信息,方法是使用表單元素。在ASP.NET 1.x中,網(wǎng)頁(yè)則利用投遞機(jī)制,把頁(yè)面數(shù)據(jù)提交給該頁(yè)本身。下面就讓我們來(lái)探討這個(gè)新特性:

傳統(tǒng)ASP.NET跨頁(yè)提交方法

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

以下是引用片段:

  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屬性指定的頁(yè)面或者程序。對(duì)于ASP.NET開(kāi)發(fā)者,即使曾經(jīng)用過(guò)標(biāo)準(zhǔn)HTML表單,也是極不多見(jiàn)的。

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

SP.NET跨頁(yè)提交的又一辦法

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

以下是引用片段:

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

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

使用先前頁(yè)面

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

每當(dāng)一個(gè)跨頁(yè)請(qǐng)求發(fā)生時(shí),當(dāng)前頁(yè)的PreviousPage屬性就把促發(fā)投遞的頁(yè)面引用保存下來(lái)。如果頁(yè)面的產(chǎn)生不是來(lái)自跨頁(yè)投遞的激發(fā),或者說(shuō)頁(yè)面處于不同的程序組,那么PreviousPage屬性將不會(huì)被初始化。

你可以通過(guò)檢查PreviousPage對(duì)象來(lái)確定頁(yè)面的載入是否為跨頁(yè)投遞的結(jié)果。值如果為null,則說(shuō)明是普通的載入,而非null值則表明網(wǎng)頁(yè)來(lái)自跨頁(yè)投遞。此外,頁(yè)面類(lèi)(Page class)還包含了一個(gè)稱(chēng)作IsCrossPagePostBack的方法(method),專(zhuān)門(mén)用來(lái)確定頁(yè)面是不是跨頁(yè)投遞的結(jié)果。

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

以下是引用片段:

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

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

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

#p#

以下是引用片段:

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

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

以下是引用片段:

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

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

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

總結(jié)

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

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

【編輯推薦】

  1. ASP.NET環(huán)境下的Shell函數(shù)
  2. 在ASP.NET中向數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)
  3. ASP.NET用Post方式向網(wǎng)頁(yè)發(fā)送數(shù)據(jù)
  4. ASP.NET 2.0部署WEB應(yīng)用程序淺析
  5. ASP.NET上傳文件面面觀
責(zé)任編輯:冰荷 來(lái)源: it55
相關(guān)推薦

2009-07-27 17:26:39

ASP.NET功能

2009-07-29 16:08:07

ASP和ASP.NET

2009-07-22 16:25:41

ASP.NET AJA

2009-07-28 16:57:50

ASP.NET Ses

2009-08-05 11:14:33

ASP.NET ISA

2009-07-24 10:14:22

ASP.NET開(kāi)發(fā)

2009-07-23 13:19:51

2009-08-21 10:51:55

ASP.NET Rou解析URL

2009-07-29 15:34:13

2017-03-06 11:13:57

ASP.NETCoreMVC

2009-09-09 12:35:00

ASP.NET回車(chē)提交回車(chē)提交事件

2009-07-23 13:09:23

2015-11-19 09:26:01

ASP.NET跨平臺(tái)實(shí)踐

2009-10-26 15:55:43

URL Routing

2009-08-19 13:44:00

ASP.NET Lis

2009-08-04 10:43:59

ASP.NET控件開(kāi)發(fā)

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-08-04 18:10:35

ASP.NET動(dòng)態(tài)編譯

2010-10-08 14:32:32

ASP.NET MVCNuPack

2009-07-27 13:39:06

Web窗體頁(yè)ASP.NET
點(diǎn)贊
收藏

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