99热热热_国产成人自拍一区_欧美一级网站_99热在线播放_国产精品乱码一区二区三区_久久精品国产一区二区三区

訂閱本欄目 RSS您所在的位置: 深山工作室 > asp.net > 正文

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

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

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

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

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

  一、響應(yīng)重定向方法

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

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

   protected void Redirect_Click(object sender, EventArgs e)
  {

  Response.Redirect("menu.aspx");

  }

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

   protected void Redirect_Click(object sender, EventArgs e)
  {

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

  }

  上面的例子將一個(gè)查詢字符串作為參數(shù)傳遞給了Response.Redirect方法的目標(biāo)URL。我們可以通過如下的代碼獲得源數(shù)據(jù)。  

protected void Page_Load(object sender, EventArgs e)
  {

  string userName = Request["userName"];

  }

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

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

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

   Server.Transfer("Menu.aspx",true);
  然后,我們?cè)谀繕?biāo)頁面中獲得一個(gè)叫txtUserName的Textbox控件的值的代碼如下:

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

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

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

  四、跨頁提交概述

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

  五、實(shí)現(xiàn)跨網(wǎng)頁提交

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

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

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

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

  對(duì)于上面的html代碼來說,當(dāng)用戶單擊按鈕時(shí),瀏覽器將提交目標(biāo)URL(Target.aspx),而不是源URL。

六、從目標(biāo)頁面中獲得源頁面控件的值

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

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

   if ( PreviousPage.IsCrossPagePostBack)
  {

  //執(zhí)行代碼

  }

  這個(gè)PreviousPage屬性在Server.Transfer和跨網(wǎng)頁提交中都可以使用。在ASP.NET2.0中,我們可以在調(diào)用Server.Transfer操作后使用PreviousPage屬性在目標(biāo)頁面中來獲得源頁面的數(shù)據(jù),代碼如下:

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

  }

  protected void Redirect_Click(object sender, EventArgs e)

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

   protected void Page_Load(object sender, EventArgs e)
  {

  if (PreviousPage != null)

  {

  TextBox txtBox = (TextBox)

  PreviousPage.FindControl("txtUserName");

  if (textBox != null)

  string userName = textBox.Text;

  //其他可執(zhí)行的代碼

  }

  }

  要注意的是上面的代碼必須將txtUserName控件轉(zhuǎn)換為TextBox類型,以便可以訪問其中的值。

七、使用PreviousPageType

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

   < 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”的目標(biāo)頁。這個(gè)目標(biāo)頁可以使用如下的代碼獲得用戶名和密碼:

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

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

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

  {

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

  Response.Write(txtBox.Text);

  }

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

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

相關(guān)閱讀
我的地盤我做主之留言板模板
asp利用函數(shù)生成指定位數(shù)的隨機(jī)數(shù)字符串
javascript取漢字拼音首字母縮寫程序
window.location.href和setTimeout結(jié)合時(shí)間錯(cuò)誤
一個(gè)可以說是超級(jí)變態(tài),超級(jí)強(qiáng)的DIV+CSS應(yīng)用
青島景色旅程
還在備案期間是否可以提前購買系統(tǒng)?
chrome谷歌瀏覽器中的谷歌翻譯有問題一鍵修復(fù)處理
共有0條關(guān)于《ASP.NET 2.0跨網(wǎng)頁提交的三法》的評(píng)論
發(fā)表評(píng)論
正在加載評(píng)論......
返回頂部發(fā)表評(píng)論
呢 稱:
表 情:
內(nèi) 容:
評(píng)論內(nèi)容:不能超過 1000 字,需審核,請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)政策法規(guī)。
驗(yàn)證碼: 驗(yàn)證碼 
網(wǎng)友評(píng)論聲明,請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)政策法規(guī)。

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

更多信息>>欄目類別選擇
百度小程序開發(fā)
微信小程序開發(fā)
微信公眾號(hào)開發(fā)
uni-app
asp函數(shù)庫
ASP
DIV+CSS
HTML
python
更多>>同類信息
ASP.NET中Cookie編程的基礎(chǔ)知識(shí)
ASP.NET 2.0跨網(wǎng)頁提交的三法
ASP.NET 2和IIS 7.0發(fā)生不兼容變化
ASP.NET中文亂碼問題的解決。
ASP.Net 2.0中的5個(gè)數(shù)據(jù)控件
根據(jù)頁面模板動(dòng)態(tài)生成html頁面
更多>>最新添加文章
dw里面查找替換使用正則刪除sqlserver里面的CONSTRAINT
Android移動(dòng)端自動(dòng)化測試:使用UIAutomatorViewer與Selenium定位元素
抖音直播音掛載小雪花 懂車帝小程序
javascript獲取瀏覽器指紋可以用來做投票
火狐Mozilla Firefox出現(xiàn):無法載入您的Firefox配置文件 它可能已經(jīng)丟失 或是無法訪問 問題解決集合處理辦法
在Android、iOS、Windows、MacOS中微信小程序的文件存放路徑
python通過代碼修改pip下載源讓下載庫飛起
python里面requests.post返回的res.text還有其它的嗎
更多>>隨機(jī)抽取信息
鄧州市途鴻旅行社
uni-app判斷當(dāng)前客戶端是安卓還是ios還是其它平臺(tái)
png顯示叉號(hào)的解決辦法(IE無法顯示PNG格式圖片的解決辦法)
強(qiáng)制轉(zhuǎn)載文章者加上你的文章出處
深山行者留言系統(tǒng)V2.2 (簡稱留言板V2.2)
asp之自動(dòng)閉合HTML標(biāo)簽函數(shù)
主站蜘蛛池模板: www伊人| 我妈妈的女朋友 | 香蕉视频亚洲 | 伊人网在线视频 | 在线免费观看国产精品 | 亚洲精品456在线播放牛牛影院 | 亚洲网站在线播放 | www.国产一区二区 | 91丨九色丨国产在 | 日韩免费观看视频 | 国产欧美精品aaaaa久久 | 亚洲精品在线播放 | 精品一区二区不卡 | 日韩电影一区二区三区 | 日本一区二区三区在线看 | 日本一级大全 | 久久在线精品 | 黄软件 | 日韩av在线一区二区 | 欧美成人精品一区二区 | 少妇激三级做爰在线观看 | 日韩av电影免费在线观看 | 国产主播在线播放 | 狠狠色伊人亚洲综合成人 | 一个人晚上高清视频ww | 久久一区三区 | 日韩欧美日韩在线 | 三级网址在线播放 | 日本中出视频 | 麻豆短视频在线观看 | 国产色拍拍拍拍在线精品 | 亚洲在线 | 日本黄又爽又大高潮毛片 | 亚洲91视频 | 一级毛片免费在线 | 四虎1515| 年轻的母亲2电影 | 亚洲成人第一 | 色天天综合网 | 美女av一区 | 欧美 中文字幕 |