ASP.NET頁面傳值之Server.Transfer

http://blog.csdn.net/bdstjk

說起來有點慚愧,做了這麼久的.NET,今天才真正搞明白Server.Transfer

先來看看代碼:

B.aspx

        public string TextBox1Text
        {
            get
            {
                return TextBox1.Text;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Server.Transfer("A.aspx");
        }


A.ASPX

 protected void Page_Load(object sender, EventArgs e)
        {
            B b = Context.Handler as B;//獲取到B頁面的引用
            if (b != null)
            {
                Response.Write("人家是A.aspx哦!<br/>");
                Response.Write("你在B頁面輸入的是:"+b.TextBox1Text);
            }
            else
            {
                Response.Write("你跑過來幹嘛!<br/>");
            }
        }


 

這個纔可以說是面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方法是完全面象對象的,簡潔有效。

Server.Transfer是從當前的ASPX頁面轉到新的ASPX頁面,服務器端執行新頁並輸出,在新頁面中通過Context.Handler來獲得前一個頁面傳遞的各種數據類型的值、表單數據、QueryString.由於重定向完全在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的。調用Server.Transfer時,當前的ASPX頁面終止執行,執行流程轉入另一個ASPX頁面,但新的ASPX頁面仍使用前一ASPX頁面創建的應答流。

ps:比較Server.Transfer和Response.Redirect的區別。

(1)Server.Transfer在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的;Response.Redirect是客戶端完成,向服務器端提出新的頁面處理請求,所以客戶端瀏覽器中的URL地址是會改變的。

(2)Server.Transfer在服務器端完成,不需要客戶端提出請求,減少了客戶端對服務器端提出請求。

(3)Server.Transfer只能夠轉跳到本地虛擬目錄指定的頁面,也就是工程項目中的頁面,而Response.Redirect則十分靈活,可以跳轉到任何URL地址。

(4)Server.Transfer可以將前一個頁面的各種類型的值傳到新的頁面;Response.Redirect則只能藉助URL中帶參數或是結合上面四種辦法把各種類型的值傳到新的頁面。

優點:1.直接在服務器端重定向,使用簡單方便,減少了客戶端對服務器端提出請求;2.可以傳遞各種數據類型的值和控件的值。

缺點:1.客戶端瀏覽器中的URL地址是不改變,會導致在新的頁面可能出現一些意想不到的問題。比如如果源頁面和目的頁面不在同一個虛擬目錄或其子目錄下,那麼使用相對路徑的圖片、超鏈接都會導致錯誤的指向。

使用方法:1.在源頁面的代碼中,使用Page類的Server.Transfer跳到另一個頁面傳遞頁面數據:Server.Transfer("b.aspx","false");2.在目的頁面中,使用Context.Handler來接收數據:FormerPage formerPage = (FormerPage)Context.Handler; 然後用formerPage的屬性和方法來獲取前一個頁面的值,或者直接用Context.Items["myParameter "]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章