跨頁面傳值

  關於頁面傳值的方法,引發了很多討論。看來有很多人關注這個,我就我個人觀點做了些總結,希望對大家有所幫助。   1.  使用QueryString變量
  QueryString是一種非常簡單的傳值方式,他可以將傳送的值顯示在瀏覽器的地址欄中。如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可以使用這個方法。但是對於傳遞數組或對象的話,就不能用這個方法了。下面是一個例子:
  a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e) 
{ 
    string s_url; 
    s_url = "b.aspx?BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>private void Page_Load(object sender, EventArgs e) 
{ 
    Label2.Text = Request.QueryString["name"]; 
} 

  2.  使用Application 對象變量
  Application對象的作用範圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock。
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e) 
{ 
    Application["name"] = Label1.Text; 
    Server.Transfer("b.aspx"); 
} 

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e) 
{ 
    string name; 
    Application.Lock(); 
    name = Application["name"].ToString(); 
    Application.UnLock(); 
} 

  3.  使用Session變量
  想必這個肯定是大家使用中最常見的用法了,其操作與Application類似,作用於用戶個人,所以,過量的存儲會導致服務器內存源的耗盡。
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e) 
{ 
    Session["name"] = Label.Text; 
} 

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e) 
{ 
    string name; 
    name = Session["name"].ToString(); 
} 

  4.  使用Cookie對象變量
  這個也是大家常使用的方法,與Session一樣,其是什對每一個用戶而言的,但是有個本質的區別,即Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用。
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e) 
{ 
    HttpCookie cookie_name = new HttpCookie("name"); 
    cookie_name.Value = Label1.Text; 
    Reponse.AppendCookie(cookie_name); 
    Server.Transfer("b.aspx"); 
} 

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e) 
{ 
    string name; 
    name = Request.Cookie["name"].Value.ToString(); 
} 

  5.  使用Server.Transfer方法
  這個纔可以說是面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方法是完全面象對象的,簡潔有效。
  a.aspx的C#代碼
public string Name 
{ 
    get{ return Label1.Text;} 
} 
private void Button1_Click(object sender, System.EventArgs e) 
{ 
    Server.Transfer("b.aspx"); 
} 

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e) 
{ 
    a newWeb;   //實例a窗體 
    newWeb = (source)Context.Handler; 
    string name; 
    name = newWeb.Name; 
}



Application
1.         Application用來保存所有用戶共用的信息
2.         在Asp時代,如果要保存的數據在應用程序生存期內不會或者很少發生改變,那麼使用Application是理想的選擇。但是在Asp.net開發環境中我們把類似的配置數據放在Web.config中。
3.         如果要使用Application 要注意的是所有的寫操作都要在Application_OnStart事件中完成(global.Asax),儘管可以使用Application.Lock()避免了衝突,但是它串行化了對Application的請求,會產生嚴重的性能瓶頸。
4.         不要使用Application保存大數據量信息
5.         代碼:Application[“UserID”]=”test”;
        String UserName=Application[“UserID”].ToString();


Session
1.         Session用來保存每一個用戶的專有信息
2.         Session的生存期是用戶持續請求時間加上一段時間(一般是20分鐘左右)
3.         Session信息是保存在Web服務器內存中的,保存數據量可大可小
4.         Session超時或者被關閉將自動釋放數據信息
5.         由於用戶停止使用應用程序之後它仍在內存中存留一段時間,因此這種方法效率較低
6.         代碼:Session[“UserID”]=”test”;
        String UserName=Session[“UserID”].ToString();


Cookie
1.         Cookie用來保存客戶瀏覽器請求服務器頁面的請求信息
2.         我們可以存放非敏感的用戶信息,保存時間可以根據需要設置
3.         如果沒有設置Cookie失效日期,它的生命週期保存到關閉瀏覽器爲止
4.         Cookie對象的Expires屬性設置爲MinValue表示永不過期
5.         Cookie存儲的數據量受限制,大多數的瀏覽器爲4K因此不要存放大數據
6.         由於並非所有的瀏覽器都支持Cookie,數據將以明文的形式保存在客戶端
7.         代碼:Resopnse.Cookies[“UserID”]=”test”;
        String UserName= Resopnse.Cookies [“UserID”].ToString();


ViewState
1.         ViewState用來保存用戶的狀態信息,有效期等於頁面的生命週期
2.         可以保存大量數據但是要慎用,因爲會影響程序性能
3.         所有的Web服務器控件都是用ViewState在頁面PostBack期間保存狀態
4.         不需要則關閉 @page 裏面設置EnableViewState=false
5.         代碼:ViewState[‘”ID”]=”yiner”;
   String ID =ViewState[“ID”].ToString();


Cache
1.         Cache用於在Http請求期間保存頁面或者數據
2.         Cache的使用可以大大的提高整個應用程序的效率
3.         它允許將頻繁訪問的服務器資源存儲在內存中,當用戶發出相同的請求後
服務器不是再次處理而是將Cache中保存的數據直接返回給用戶
4.         可以看出Cache節省的是時間—服務器處理時間
5.         Cache實例是每一個應用程序專有的,其生命週期==該應用程序週期
應用程序重啓將重新創建其實例
6.         注意:如果要使用緩存的清理、到期管理、依賴項等功能必須使用Insert 或者Add方法方法添加信息
7.         代碼:Cache[‘”ID”]=”yiner”;或者Cache.Insert(“ID”,”test”);
   String ID =Cache[“ID”].ToString();


Hidden
1.         Hidden控件屬於Html類型的服務器控件,始終處於隱藏狀態
2.         每一次提交的時候它會和其他服務器控件一起提交到服務器端
3.         代碼如下:Hidden.Value=”king”;
string id=Hidden.Value; 要使用Runat=server

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