<button id="nc8ni"><xmp id="nc8ni"><button id="nc8ni"></button><ins id="nc8ni"><button id="nc8ni"><form id="nc8ni"></form></button></ins>
<button id="nc8ni"><form id="nc8ni"></form></button>
<form id="nc8ni"><xmp id="nc8ni">
<ins id="nc8ni"><button id="nc8ni"></button></ins>
<button id="nc8ni"><xmp id="nc8ni">
<ins id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></ins>
<button id="nc8ni"><xmp id="nc8ni">
<button id="nc8ni"><xmp id="nc8ni">
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button><button id="nc8ni"><form id="nc8ni"></form></button>
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button><button id="nc8ni"><xmp id="nc8ni"><button id="nc8ni"></button><form id="nc8ni"><ins id="nc8ni"><form id="nc8ni"></form></ins></form><button id="nc8ni"><xmp id="nc8ni"><ins id="nc8ni"></ins>
<button id="nc8ni"><xmp id="nc8ni"><ins id="nc8ni"></ins><form id="nc8ni"><ins id="nc8ni"><form id="nc8ni"></form></ins></form>
<ins id="nc8ni"><form id="nc8ni"></form></ins>
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button>
<button id="nc8ni"></button>
<button id="nc8ni"></button>
訂閱本欄目 RSS您所在的位置: 深山工作室 > asp.net > 正文

ASP.NET 2.0跨網(wǎng)頁(yè)提交的三法

博客網(wǎng) 2008/4/17 20:13:03 深山行者 字體: 瀏覽 28131

當在一個(gè)ASP.NET Web頁(yè)面中進(jìn)行操作時(shí),在默認情況下向當前頁(yè)進(jìn)行提交。這種行為在A(yíng)SP.NET出現之前并沒(méi)有什么關(guān)系,但在A(yíng)SP.NET中當我們想向另外一個(gè) Web頁(yè)提交一個(gè)Web Form時(shí)該如何做呢?在A(yíng)SP.NET1.0中這個(gè)問(wèn)題變得很難解決,但在A(yíng)SP.NET2.0中為開(kāi)發(fā)人員提供了更容易的解決的技術(shù):跨網(wǎng)頁(yè)提交。這種技術(shù)允許一個(gè)網(wǎng)頁(yè)在提交數據時(shí)提交給另外的一個(gè)頁(yè)面。在跨網(wǎng)頁(yè)提交中,用于初始化提交代碼的頁(yè)面叫源頁(yè)面,而客戶(hù)提交的頁(yè)面叫目標頁(yè)面。

  為了方便起見(jiàn),目標頁(yè)面仍然獲得原頁(yè)面提交的所有數據。換名話(huà)說(shuō),從技術(shù)觀(guān)點(diǎn)出發(fā),我們可以用同樣的方式處理其他ASP.NET頁(yè)面提交的數據。

  這個(gè)新特性意味著(zhù)ASP.NET2.0開(kāi)發(fā)人員目前有三種可供選擇的技術(shù)來(lái)將數據從一個(gè)web頁(yè)面傳送到另外一個(gè)頁(yè)面。這三種方法是:響應重定向,服務(wù)端傳輸和新的跨網(wǎng)頁(yè)提交特性。我們可以已經(jīng)熟悉前兩種技術(shù)了,因此,我們只是簡(jiǎn)要地復習一下它們,然后我們會(huì )將主要精力放到學(xué)習如何使用跨網(wǎng)頁(yè)提交特性,以及闡述一下這種方法和響應重定向以及服務(wù)傳輸方式有什么不同。

  一、響應重定向方法

  響應重定向方法是目前為止將一個(gè)網(wǎng)頁(yè)重定向到另一個(gè)網(wǎng)頁(yè)的最簡(jiǎn)單的方法的最簡(jiǎn)單的方法。當Web服務(wù)器接到一個(gè)重定向請求后,它會(huì )將一個(gè)響應頭送給客戶(hù)端,這將導致客戶(hù)端發(fā)送一個(gè)新的請求到服務(wù)器。按句話(huà)說(shuō),一個(gè)重定向請求實(shí)際上是兩個(gè)請求響應:一個(gè)是最初的請求響應,另一個(gè)是新的重定向請求響應。

  在A(yíng)SP.NET中實(shí)現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實(shí)現網(wǎng)頁(yè)重定向:

   protected void Redirect_Click(object sender, EventArgs e)
  {

  Response.Redirect("menu.aspx");

  }

  要注意的是重定向請求只是一個(gè)GET請求,這就意味著(zhù)我們不能從源頁(yè)中通過(guò)重定向命令提交數據。但是我們可以在重定向中使用查詢(xún)字符串來(lái)傳遞數據。如下面代碼所示:

   protected void Redirect_Click(object sender, EventArgs e)
  {

  Response.Redirect("menu.aspx?userName=" + UserName.Text));

  }

  上面的例子將一個(gè)查詢(xún)字符串作為參數傳遞給了Response.Redirect方法的目標URL。我們可以通過(guò)如下的代碼獲得源數據?! ?

protected void Page_Load(object sender, EventArgs e)
  {

  string userName = Request["userName"];

  }

  二、服務(wù)器傳輸方法

  和依賴(lài)于客戶(hù)端向另一個(gè)新頁(yè)發(fā)請求不同,服務(wù)器傳輸是一種服務(wù)器重定向技術(shù),這種技術(shù)通過(guò)簡(jiǎn)單的改變Web服務(wù)器所處理的代碼來(lái)達到請求一個(gè)新頁(yè)的目的。當被請求頁(yè)和源頁(yè)面在同一個(gè)服務(wù)器時(shí),服務(wù)器傳輸要比Response.Redirect方法更有效,這是由于這種技術(shù)可以避免額外的開(kāi)銷(xiāo),僅僅使用服務(wù)器的資源就可以進(jìn)行重定向。要注意的這種技術(shù)有一個(gè)副作用,在頁(yè)面進(jìn)行重定向時(shí),客戶(hù)端的URL仍然會(huì )保持源頁(yè)面的URL,這可能會(huì )使客戶(hù)認為他們所獲得的數據是源頁(yè)面產(chǎn)生的。當然,在大多數情況下,這不是問(wèn)題,但是這將使調試變得更困難。

  Server.Transfer方法還可以保存初始頁(yè)的HttpContext。因此,目標頁(yè)可以訪(fǎng)問(wèn)源頁(yè)面的值。我們可以使用FormsCollection屬性來(lái)從目標頁(yè)面中獲得源頁(yè)面的值。首先,要確定我們使用了被重載的方法,這個(gè)方法有兩個(gè)參數:目標URL和一個(gè)Boolean類(lèi)型的值,告訴服務(wù)器是否保存用于描述源頁(yè)面值的 Form。如下面的代碼所示:

   Server.Transfer("Menu.aspx",true);
  然后,我們在目標頁(yè)面中獲得一個(gè)叫txtUserName的Textbox控件的值的代碼如下:

   object obj = Request.Form["txtUserName"];

  三、Response.Redirect和Server.Transfer的比較

  由于Response.Redirect方法要進(jìn)行兩次請求響應操作,因此,我們應該在對性能要求高的網(wǎng)站盡量避免使用這種方法。然而,只從技術(shù)上說(shuō),使用redirect方式確實(shí)可以從一個(gè)網(wǎng)頁(yè)跳到另一個(gè)網(wǎng)頁(yè)。相比之下,Server.Transfer會(huì )更有效率,但是跳轉的范圍僅限于同一個(gè)Web服務(wù)器的不同網(wǎng)頁(yè)。從本質(zhì)上說(shuō),我們可以使用Server.Transfer來(lái)消除不必要的請求響應操作。如果我們需要重定位到不同服務(wù)器的網(wǎng)頁(yè),就需要使用Response.Redirect方法。

  四、跨頁(yè)提交概述

  在A(yíng)SP.NET 2.0中,我們可以通過(guò)實(shí)現IbuttonControl接口提交給不同的WebForm,來(lái)實(shí)現跨網(wǎng)頁(yè)的提交。和Response.Redirect類(lèi)似,跨網(wǎng)頁(yè)提交是一個(gè)基于客戶(hù)端的傳輸機制,但也有點(diǎn)象Server.Transfer,目標網(wǎng)頁(yè)也可以訪(fǎng)問(wèn)源網(wǎng)頁(yè)的數據。為了使用跨網(wǎng)頁(yè)提交,我們需要在源網(wǎng)頁(yè)中的PostBackUrl屬性中指定目標URL。

  五、實(shí)現跨網(wǎng)頁(yè)提交

  這部分將討論一下如何在 ASP.NET2.0中實(shí)現跨網(wǎng)頁(yè)提交。為了開(kāi)始我們的學(xué)習,假設有兩個(gè)Web頁(yè),一個(gè)是源Web頁(yè),另一個(gè)是目標Web頁(yè)。在源網(wǎng)頁(yè)中初始化了使用按鈕進(jìn)行的跨網(wǎng)頁(yè)提交操作。我們首先必須設置目標網(wǎng)頁(yè)按鈕的PostBackUrl屬性,順便說(shuō)一句,所有實(shí)現了 System.Web.UI.WebControls.IbuttonControl接口的Web控件都有跨網(wǎng)頁(yè)提交的特性。下面的代碼將演示這一過(guò)程。

   PostBackUrl="~/target.aspx" text = "Post to a target page"/>
  當我們設置PostBackUrl屬性時(shí),ASP.NET框架將相應的控件綁定到一個(gè)新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產(chǎn)生的Html代碼如下:

   onclick="javascript:WebForm_DoPostBackWithOptions(
  new WebForm_PostBackOptions("btnSubmit", "", false, "",

  "Target.aspx", false, false))" id="btnSubmit" />

  對于上面的html代碼來(lái)說(shuō),當用戶(hù)單擊按鈕時(shí),瀏覽器將提交目標URL(Target.aspx),而不是源URL。

六、從目標頁(yè)面中獲得源頁(yè)面控件的值

  ASP.NET2.0提供了一個(gè)叫PreviousPage的新的屬性,這個(gè)屬性無(wú)論在何時(shí)當前頁(yè)面進(jìn)行跨網(wǎng)頁(yè)提交操作時(shí)都會(huì )指向源頁(yè)面。要注意的是,當源頁(yè)面和目標頁(yè)面在不同的應用程序中時(shí),這個(gè)屬性包含null(這個(gè)null并不是未初始化的意思)。還有要注意的是當目標網(wǎng)頁(yè)訪(fǎng)問(wèn) PreviousPage屬性時(shí)可以獲得源頁(yè)面的數據,ASP.NET運行時(shí)裝載并執行了源頁(yè)面。這將引發(fā)ProcessChildRequest事件的發(fā)生。而且,它還會(huì )引發(fā)Page_Init事件、Page_Load和任何其他的源頁(yè)面按鈕單擊事件。

  因此,我們要避免由于不小心進(jìn)行誤操作,所以最好通過(guò)IsCrossPostBack屬性來(lái)確認是否為一個(gè)跨網(wǎng)頁(yè)提交發(fā)生,如果這個(gè)屬性值為true,那么目標網(wǎng)頁(yè)就是通過(guò)一個(gè)跨網(wǎng)頁(yè)提交動(dòng)作而調用的。如果是通過(guò)另外一種方式調用的(如一般的請求、Response.Redirect或是一個(gè)Server.Transfer),這個(gè)屬性的值為false。下面的例子演示了如何使用這個(gè)屬性。

   if ( PreviousPage.IsCrossPagePostBack)
  {

  //執行代碼

  }

  這個(gè)PreviousPage屬性在Server.Transfer和跨網(wǎng)頁(yè)提交中都可以使用。在A(yíng)SP.NET2.0中,我們可以在調用Server.Transfer操作后使用PreviousPage屬性在目標頁(yè)面中來(lái)獲得源頁(yè)面的數據,代碼如下:

   {
  Server.Transfer("menu.aspx");

  }

  protected void Redirect_Click(object sender, EventArgs e)

  在這個(gè)接收面中我們現在可以獲得Web頁(yè)面的數據,代碼如下:

   protected void Page_Load(object sender, EventArgs e)
  {

  if (PreviousPage != null)

  {

  TextBox txtBox = (TextBox)

  PreviousPage.FindControl("txtUserName");

  if (textBox != null)

  string userName = textBox.Text;

  //其他可執行的代碼

  }

  }

  要注意的是上面的代碼必須將txtUserName控件轉換為T(mén)extBox類(lèi)型,以便可以訪(fǎng)問(wèn)其中的值。

七、使用PreviousPageType

  PreviousPageType屬性提供了在跨網(wǎng)頁(yè)操作中訪(fǎng)問(wèn)源頁(yè)面的強類(lèi)型能力,下面讓我們演示一下如何不通過(guò)任何類(lèi)型轉換來(lái)從源頁(yè)面中獲得控件值。代碼如下:

   < asp:Textbox ID="txtUserName" Runat="server" />   < asp:Textbox ID="txtPassword" Runat="server" />   < asp:Button ID="Submit" Runat="server" Text="Login"   PostBackUrl="Menu.aspx" />

  要注意的是單擊按鈕可以重定向到一個(gè)叫“Menu.asp”的目標頁(yè)。這個(gè)目標頁(yè)可以使用如下的代碼獲得用戶(hù)名和密碼:

  八、保存視圖狀態(tài)

  對于跨網(wǎng)頁(yè)提交來(lái)說(shuō),ASP.NET2.0 內嵌了一個(gè)叫__POSTBACK的隱藏字段,這個(gè)字段包含了關(guān)于源頁(yè)面的視圖信息 -- 也就是由源頁(yè)面提供了,包含了一個(gè)帶有一個(gè)非空PostBackUrl屬性值的服務(wù)端控件。目標頁(yè)可以使用__POSTBACK中的信息來(lái)獲得源頁(yè)面的視圖狀態(tài)信息。代碼如下:

   if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
  PreviousPage.IsValid)

  {

  TextBox txtBox = PreviousPage.FindControl("txtUserName");

  Response.Write(txtBox.Text);

  }

  在上面的代碼中核對了用于確保PreviousPage屬性不為null的檢查代碼。順便提一下,如果目標頁(yè)和源頁(yè)面不在同一個(gè)應用程序中,這個(gè) PreviousPage屬性的值為null。只有在進(jìn)行跨網(wǎng)頁(yè)提交操作時(shí),IsCrossPagePostBack屬性才為true。

  這個(gè)跨網(wǎng)頁(yè)提交的特性,是ASP.NET2.0中最強有力的特性之一,這種技術(shù)將允許在一個(gè)頁(yè)面中提交到另外一個(gè)頁(yè)面,并且可以在目標頁(yè)面地無(wú)縫地操作源頁(yè)面中的數據。

相關(guān)閱讀
非常不錯的頁(yè)面搜索器,還可以移動(dòng)
游戲-植物大戰僵尸留言板模板
一個(gè)幾個(gè)圖片來(lái)回變幻的超炫的圖片轉換效果
httpd.ini一些參數說(shuō)明
旅行社網(wǎng)站模板7
超級實(shí)用且不花哨的js代碼大全( 7 )
radio單選按鈕組選擇詳細
在未知圖片的寬度與高度時(shí)利用div+css將圖片居中
共有0條關(guān)于《ASP.NET 2.0跨網(wǎng)頁(yè)提交的三法》的評論
發(fā)表評論
正在加載評論......
返回頂部發(fā)表評論
呢 稱(chēng):
表 情:
內 容:
評論內容:不能超過(guò) 1000 字,需審核,請自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)政策法規。
驗證碼: 驗證碼 
網(wǎng)友評論聲明,請自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)政策法規。

您發(fā)布的評論即表示同意遵守以下條款:
一、不得利用本站危害國家安全、泄露國家秘密,不得侵犯國家、社會(huì )、集體和公民的合法權益;
二、不得發(fā)布國家法律、法規明令禁止的內容;互相尊重,對自己在本站的言論和行為負責;
三、本站對您所發(fā)布內容擁有處置權。

更多信息>>欄目類(lèi)別選擇
百度小程序開(kāi)發(fā)
微信小程序開(kāi)發(fā)
微信公眾號開(kāi)發(fā)
uni-app
asp函數庫
ASP
DIV+CSS
HTML
python
更多>>同類(lèi)信息
ASP.NET中Cookie編程的基礎知識
ASP.NET 2.0跨網(wǎng)頁(yè)提交的三法
ASP.NET 2和IIS 7.0發(fā)生不兼容變化
ASP.NET中文亂碼問(wèn)題的解決。
ASP.Net 2.0中的5個(gè)數據控件
根據頁(yè)面模板動(dòng)態(tài)生成html頁(yè)面
更多>>最新添加文章
dw里面查找替換使用正則刪除sqlserver里面的CONSTRAINT
Android移動(dòng)端自動(dòng)化測試:使用UIAutomatorViewer與Selenium定位元素
抖音直播音掛載小雪花 懂車(chē)帝小程序
javascript獲取瀏覽器指紋可以用來(lái)做投票
火狐Mozilla Firefox出現:無(wú)法載入您的Firefox配置文件 它可能已經(jīng)丟失 或是無(wú)法訪(fǎng)問(wèn) 問(wèn)題解決集合處理辦法
在A(yíng)ndroid、iOS、Windows、MacOS中微信小程序的文件存放路徑
python通過(guò)代碼修改pip下載源讓下載庫飛起
python里面requests.post返回的res.text還有其它的嗎
更多>>隨機抽取信息
CSS教程:li和ul標簽具體用法舉例
用javscript實(shí)現為表格的每一行自動(dòng)加上序號
我的地盤(pán)我做主之留言板模板
新敦煌國際旅行社
關(guān)于網(wǎng)頁(yè)里面的DOCTYPE見(jiàn)解
亂涂
亚洲精品456在线|S级爆乳玩具酱国产VIP皮裤|欧美成人精品第一区二区三区|久久永久免费人妻精品我不卡|亚洲欧洲日产无码
<button id="nc8ni"><xmp id="nc8ni"><button id="nc8ni"></button><ins id="nc8ni"><button id="nc8ni"><form id="nc8ni"></form></button></ins>
<button id="nc8ni"><form id="nc8ni"></form></button>
<form id="nc8ni"><xmp id="nc8ni">
<ins id="nc8ni"><button id="nc8ni"></button></ins>
<button id="nc8ni"><xmp id="nc8ni">
<ins id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></ins>
<button id="nc8ni"><xmp id="nc8ni">
<button id="nc8ni"><xmp id="nc8ni">
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button><button id="nc8ni"><form id="nc8ni"></form></button>
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button><button id="nc8ni"><xmp id="nc8ni"><button id="nc8ni"></button><form id="nc8ni"><ins id="nc8ni"><form id="nc8ni"></form></ins></form><button id="nc8ni"><xmp id="nc8ni"><ins id="nc8ni"></ins>
<button id="nc8ni"><xmp id="nc8ni"><ins id="nc8ni"></ins><form id="nc8ni"><ins id="nc8ni"><form id="nc8ni"></form></ins></form>
<ins id="nc8ni"><form id="nc8ni"></form></ins>
<button id="nc8ni"><form id="nc8ni"><ins id="nc8ni"></ins></form></button>
<button id="nc8ni"></button>
<button id="nc8ni"></button>