解讀ASP.NET 2.0跨網頁提交的三種方法_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:揭秘設計ASP.NET應用程序的七大妙招
      隨著微軟.NET的流行,ASP.NET越來越為廣大開發人員所接受。作為ASP.NET的開發人員,我們不僅需要掌握其基本的原理,更要多多實踐,從實踐中獲取真正的開發本領。在我們的實際開發中,往往基本的原理滿足不了開發需求,我們更多的要積累一些開發技巧,本文就

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

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

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

      一、響應重定向方法

      響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web服務器接到一個重定向請求后,它會將一個響應頭送給客戶端,這將導致客戶端發送一個新的請求到服務器。按句話說,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。

      在ASP.NET中實現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實現網頁重定向:

      以下為引用的內容:
      protected void Redirect_Click(object sender, EventArgs e) { Response.Redirect("menu.aspx"); }

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

      以下為引用的內容:
      protected void Redirect_Click(object sender, EventArgs e) { Response.Redirect("menu.aspx?userName=" UserName.Text)); }

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

      以下為引用的內容:
      protected void Page_Load(object sender, EventArgs e) { string userName = Request["userName"]; }

      二、服務器傳輸方法

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

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

      Server.Transfer("Menu.aspx",true);

      然后,我們在目標頁面中獲得一個叫txtUserName的Textbox控件的值的代碼如下:

      以下為引用的內容:
      object obj = Request.Form["txtUserName"];

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

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

      四、跨頁提交概述

      在ASP.NET 2.0中,我們可以通過實現IbuttonControl接口提交給不同的WebForm,來實現跨網頁的提交。和Response.Redirect類似,跨網頁提交是一個基于客戶端的傳輸機制,但也有點象Server.Transfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。

      五、實現跨網頁提交

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

      以下為引用的內容:
      PostBackUrl="~/target.aspx" text = "Post to a target page"/>

      當我們設置PostBackUrl屬性時,ASP.NET框架將相應的控件綁定到一個新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產生的Html代碼如下:

      以下為引用的內容:
      onclick="javascript:WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions("btnSubmit", "", false, "", "Target.aspx", false, false))" id="btnSubmit" />

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

      分享:解析Web開發模式的顛覆者:ASP.NET MVC
      2008年3月微軟針對ASP.NET 3.5發布的MVC框架(Preview 2 版本)是一個真正意義上的ASP.NET MVC框架。至今,短短4個月內此框架已經發展到Preview 4版本。許多國內外業界人士稱該框架為其前基于Web表單開發模式的歷史性顛覆。本文站在對ASP.NET MVC框架與傳統AS

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-06-27
      相關.Net教程