在ASP.NET頁面間傳遞任意資料的方法與執行個體

來源:互聯網
上載者:User

近來論壇中關於在不同頁面之間傳遞參數的問題很多,在此做一個簡單的說明,希望給給朋友們一些協助,也希望朋友們能開展更多這方面的討論,歡迎高手們提出自己更好的方法。

關於不同頁面之間傳遞參數,一般常規用法是:
1、通過URL後帶的參數
這種方法受限制很多,一是將參數暴露出來,容易帶來一些安全方面的隱患,二是所帶參數如果數量較多,控制起來也很麻煩;

2、通過常規表單中的POST提交
這種方法最常用,但在ASP.NET頁面中的FROM控制項無法象一般FORM那樣將參數傳到另一頁面,需要通過特定的方式,否則和第一種方式無異。

3、Session方式
傳統方式之一,對於特定的環境有利,釋放也比較容易

4、通過介面或類的方式實現。我們主要討論一下這個方法。
基於WEB方式,使用變數傳遞必須要使用私人變數,因為很簡單,如果你使用公有或靜態變數,那會出現極大的混亂,朋友們可以考慮一下為什嗎?
如果用類的屬性,一個問題是對象的存留時間和範圍限制我們不能以私人的方式來進行傳遞。

下面是結合一些SDK中的一些方法寫的一個例子,供參考:

說明:為了進行更大數量和類型的參數的傳遞,也是chequan朋友的問題,考慮使用結構來實現。結構有其好處,合理使用,應該不會造成太大的資源佔用,特別是在這種傳遞上。有想法的朋友也可以一起討論一下結構的使用。
例子:
做一個類檔案,為Trancfer.cs,內容如下:
using System;

namespace WEBLOG.Class
{
  /// <summary>
  /// 定義一個結構,需要傳遞的內容可以由自己來定義,可以定義多個結構,以適合自己的需要
  /// </summary>
  public struct NormalUserRegInfo
  {
     public string UserName;
     public string UserPassWord;
     public string Quesion;
     public string Answer;
     public string UserEmail;
     public string UserClass;
  }

  /// <summary>
  /// 此介面定義了一個返回所需傳遞對象的屬性
  /// 發送對象的頁面必須實現此介面
  /// </summary>
  public interface ITransferface
  {
     TrancferClass TranceferObject{get;set;}
  }

  /// <summary>
  /// Trancfer 的摘要說明。
  /// </summary>
  public class TrancferClass
  {
     public TrancferClass()
     {
        //
        // TODO: 在此處添加建構函式邏輯
        //
     }

     private NormalUserRegInfo _strMessage;

     public NormalUserRegInfo TranceferMessage
     {
        get
        {
           return this._strMessage;
        }
        set
        {
           this._strMessage = value;
        }
     }

  }
}

有了這個類,就可以在頁面中進行操作了,
假設我們有一個頁面,名為Set.aspx,通過一個Button將一些參數發到Get.aspx頁面中,
這兩個頁面的相關代碼如下:
====================
Set.aspx.cs
====================
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using WEBLOG.Class;

namespace WEBLOG
{
  /// <summary>
  /// Set 的摘要說明。
  /// </summary>
  public class Set : System.Web.UI.Page,ITransferface
  {
     protected System.Web.UI.WebControls.Button Button1;
     private TrancferClass _temptrancefer;
     private void Page_Load(object sender, System.EventArgs e)
     {
        // 在此處放置使用者代碼以初始化頁面
        _temptrancefer = new TrancferClass();
     }

     #region Web Form設計器產生的程式碼
     override protected void OnInit(EventArgs e)
     {
        //
        // CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
     }
     
     /// <summary>
     /// 設計器支援所需的方法 - 不要使用代碼編輯器修改
     /// 此方法的內容。
     /// </summary>
     private void InitializeComponent()
     {    
        this.Button1.Click += new System.EventHandler(this.Button1_Click);
        this.Load += new System.EventHandler(this.Page_Load);

     }
     #endregion

     //實現ITransferface介面
     public TrancferClass TranceferObject  
     {
        get
        {
           return this._temptrancefer;
        }
        set
        {
           this._temptrancefer = value;
        }
     }

     private void Button1_Click(object sender, System.EventArgs e)
     {
        //定義一個結構,傳遞這個結構
        NormalUserRegInfo temptest = new NormalUserRegInfo();
        temptest.Answer="AAAAAAAAAAAAAAAA";
        temptest.Quesion="BBBBBBBBBBBBB";
        temptest.UserName="CCCCCCCCCCCCCCCCC";
        temptest.UserPassWord="DDDDDDDDDDDDDDDDDDDDDDDDD";
        this.TranceferObject.TranceferMessage = temptest;

        //調用Server.Transfer(),轉向執行Get.aspx
        Server.Transfer("Get.aspx");
     }
  }
}

====================
Get.aspx.cs
====================
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using WEBLOG.Class;

namespace WEBLOG
{
  /// <summary>
  /// Receiver 的摘要說明。
  /// </summary>
  public class Get : System.Web.UI.Page
  {
   
     private void Page_Load(object sender, System.EventArgs e)
     {
        ITransferface mySender;

        if(!IsPostBack)
        {
           //判斷當前頁面的HttpHandler,如果實現了ITransferface介面
           //就轉換成ITransferface
           if(Context.Handler is ITransferface)
           {
              mySender = (ITransferface)Context.Handler;
              NormalUserRegInfo tempreceive =mySender.TranceferObject.TranceferMessage;
              Response.Write(tempreceive.Answer + "<BR>");
              Response.Write(tempreceive.Quesion + "<BR>");
              Response.Write(tempreceive.UserName + "<BR>");
              Response.Write(tempreceive.UserPassWord + "<BR>");
           }
           else
           {
              Response.Write("沒有接收到任何參數");
           }
        }
     }

     #region Web Form設計器產生的程式碼
     override protected void OnInit(EventArgs e)
     {
        //
        // CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
     }
     
     /// <summary>
     /// 設計器支援所需的方法 - 不要使用代碼編輯器修改
     /// 此方法的內容。
     /// </summary>
     private void InitializeComponent()
     {    
        this.Load += new System.EventHandler(this.Page_Load);

     }
     #endregion

  }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.