最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET 頁面之間傳遞值方式優(yōu)缺點比較

 更新時間:2009年11月14日 00:16:20   作者:  
URL、Session、Cookies、Server.Transfer、Application和跨頁面?zhèn)魉汀?/div>
本題考查面試者對ASP.NET中多頁面?zhèn)髦档睦斫馐欠袢妗R驗锳SP.NET的頁面表單提交到自身,完成回傳的功能,所以默認情況下不能使用POST方式進行多頁面?zhèn)髦?。關于這些傳值方式的分析如下所示。
1.URL傳值
這是經典的傳值方式,這種方法的使用非常簡單,不過所傳遞的值是會顯示在瀏覽器的地址欄上的,而且不能傳遞對象。所以這種方法一般用于傳遞的值少且安全性要求不高的情況下。在*.aspx頁面開發(fā)中可以使用超級鏈接文本進行傳值,如以下代碼所示。
<asp:HyperLink runat="server" ID="HpLink"
NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL傳值</asp:HyperLink>
以上鏈接文本將頁面跳轉到GetValues.aspx頁面,并且通過URL傳遞urlvalue1變量和urlvalue2變量,其值分別為intel和amd。在*.cs的服務器端方法中也可以調用HttpResponse對象的Redirect方法,將瀏覽器端重定向到新頁面并通過URL傳值,如以下代碼所示。
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
2.Session傳值
這種方法將每份數據存儲于服務器變量中,可以傳遞比較多的數據,并且安全性較高,所以常用于用戶身份的驗證功能中。不過,Session變量如果存儲過多的數據會消耗過多的服務器資源,編程者在使用時應該慎重,其使用方法如以下代碼所示。
Session["SessionValue"] = “ATI”;
//也可以用索引存儲
Session[0] = “ATI”;
//在其他頁面的服務器端方法中取值方式為:
string str = Session["SessionValue"].ToString();
//也可以用索引獲取
string str = Session[0].ToString();
Session的可在應用程序的多個頁面中以名稱/值對的方式共享,直到瀏覽用戶關閉自己的瀏覽器或者服務器Session超時(可設置,默認為20分鐘)。
3.Cookie傳值
Cookie是一種比較特殊的數據存儲方式,因為這種方式將數據存儲于瀏覽用戶的電腦中,以文本文件的形式存在于磁盤中。這種方式非常有意思,很多登錄系統(tǒng)就是利用Cookie實現用戶自動登錄。即用戶登錄一次的登錄信息將被寫入到用戶電腦的Cookie文件中,下次登錄時,網站自動讀取該Cookie完成身份驗證。通過Cookie傳遞數據雖然很方便,保存時間可以自由設置,但是安全性不高,編程者不應過于依賴Cookie,而應采用結合的方式完成敏感數據的存儲。
ASP.NET中操作Cookie的主要類型位于System.Web命名空間下,分別為HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作獨立Cookie的安全類型,訪問HttpResponse和HttpRequest的Cookies屬性可以獲取HttpCookieCollection集合對象,以讀取或添加HttpCookie對象。添加Cookie的方法如以下代碼所示。
//創(chuàng)建一個HttpCookie 對象,向構造函數傳遞名稱值
HttpCookie ck = new HttpCookie("CookieValue");
//設置ck的“Value”屬性(值)
ck.Value = “Cookie值”;
//設置ck的過期時間為當前時間加上360s,即6分鐘后失效
ck.Expires = DateTime.Now.AddSeconds(360);
//設置ck有效范圍(域限制)
ck.Domain = "www.google.cn";
//將ck添加至HttpCookieCollection對象
Response.Cookies.Add(ck);
//也可為以下方法添加
//Response.AppendCookie(ck);;
讀取用戶的Cookie則更為簡單,只需根據名稱讀取HttpCookieCollection集合對象中的子項即可,如以下代碼所示。
string str = Request.Cookies["CookieValue"].Value;
除此之外,還可以利用一個HttpCookie存儲多個名稱/值對形式的Cookie信息,如以下代碼所示。
HttpCookie ck = new HttpCookie("CookieValue");
//以名稱/值對的方式添加多個Cookie信息
ck.Values.Add("value1", “one”);
ck.Values.Add("value2", "two");
//設置ck的過期時間為當前時間加上100年,即100年后失效
ck.Expires = DateTime.Now.AddYears(100);
//通過以下兩種方法添加
Response.Cookies.Add(ck);
//Response.AppendCookie(ck);
讀取這些Cookie如以下代碼所示。
string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];
str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];
說明:多數瀏覽器支持最多可達4096字節(jié)的Cookie,如果要將為數不多的幾個值保存到用戶計算機上,瀏覽器還限制了每個站點可以在用戶計算機上保存的Cookie數量。大多數瀏覽器只允許每個站點保存20個Cookie。如果試圖保存更多的Cookie,則最先保存的Cookie就會被刪除。還有些瀏覽器會對來自所有站點的Cookie總數作出限制,這個限制通常為300個。用戶可以設置自己的瀏覽器,拒絕接受Cookie,這種情況下只能結合其他的數據存儲方式。
4.Server.Transfer傳值
這個方法的步驟相對較多,使用該方法編程者可以在另一個頁面以公開對象屬性的方式來存取值,使用這種方法是面向對象的。該方法的代碼編寫并不復雜,首先通過定義一個public權限的屬性,該屬性可返回所需傳遞的值。然后在第兩個頁面中,使用Context.Handler屬性來獲得前一個頁面實例對象的引用,即可通過訪問自定義的屬性獲取需要的值。
假設SendValues.aspx頁面為傳遞數據的頁面,在SendValues.aspx.cs的頁面類中定義一個public屬性,通過get直接返回需要傳遞的值(可為頁面中某個服務器控件的屬性值)。
public string TransferData
{
get
{
return "VIA";
}
}
在SendValues.aspx.cs的某個方法(如Button控件的Click事件處理方法)中調用HttpServerUtility對象的Transfer方法,如以下代碼所示。
Server.Transfer("~/GetValues.aspx");
假設GetValues.aspx為第二個頁面,在GetValues.aspx.cs的Page_Load方法中接收前一個頁面所傳遞的值,方法如以下代碼所示。
//定義SendValues類型的變量SV_Page
SendValues SV_Page;
//訪問HttpContext對象的Handler屬性,將值轉換為SendValues類型,引用賦值給SV_Page
SV_Page = (SendValues)Context.Handler;
//SV_Page即為SendValues.aspx頁面類的對象,直接獲取其TransferData屬性值
string str = SV_Page.TransferData;
可見,這種方法對于有面向對象基礎的編程者而言非常容易理解。不過頁面間如果需要傳遞數量比較多的值,這種方法需要定義過多的屬性,略顯繁雜。編程者還可以直接使用HttpContext對象的“Iterms”屬性添加多項名稱/值對的數據,在SendValues.aspx.cs調用HttpServerUtility對象的Transfer方法的某個方法中,修改代碼如下所示。
Context.Items["value1"] = "one";
Context.Items["value2"] = "two";
在GetValues.aspx.cs的Page_Load方法中接收前1個頁面所傳遞的值,修改代碼如以下代碼所示。
string str = "值1:" + Context.Items["value1"].ToString();
str += "值2:" + Context.Items["value2"].ToString();
5.Application傳值
嚴格地說應該是通過HttpApplication對象在服務器端生成一個狀態(tài)變量來存儲所需的信息,該HttpApplication對象變量的可用范圍覆蓋整個WEB應用程序。所以該對象一般存儲一些要公布的信息,如在線人數等,而對于那些涉及用戶個人的敏感數據則不用這種方法存儲。HttpApplication對象有兩個常用的方法,即Lock和UnLock方法,可用于處理多個用戶對存儲在Application變量中的數據進行寫入的問題。Lock方法鎖定全部的Application變量,從而阻止其他用戶修改Application對象的變量值,UnLock方法則解除對HttpApplication對象變量的鎖定。通過HttpApplication對象傳值的方法和Session比較相似,在頁面類的某個方法中編寫代碼如下所示。
Application["a"] = "微軟公司";
Application["b"] = "蘋果公司";
Application["c"] =  “Mac”;
以上代碼很輕松地將三個字符串值保存在HttpApplication對象的變量中了,并且這些變量是整個程序共享的,其他用戶通過相應的頁面同樣可以獲取。獲取這些變量的方法如以下代碼所示。
Application.Lock();
string str = "值1:" + Application["a"];
str  += "值2:" + Application["b"];
str  += "值3:" + Application["c"];
Application.UnLock();
注意:雖然使用方式和Session相似,但是Session是對于每個單獨的用戶,當該用戶關閉瀏覽器,則Session失效。HttpApplication對象存儲的變量是針對所有訪問程序的用戶,即使有用戶關閉了瀏覽器,變量的值不會丟失。
6.跨頁面?zhèn)魉?/STRONG>
跨頁面?zhèn)魉秃驼{用HttpServerUtility對象的Transfer方法有相似之處,不過效率更高。因為調用HttpServerUtility對象的Transfer方法是基于服務器的方法,而跨頁面?zhèn)魉褪腔跒g覽器端的。這個方法主要是設置控件的“PostBackUrl”屬性,使該控件(如Button)操作后轉向指定頁面,并且這個指定頁面可以直接獲取前一個頁面的所有控件對象及其屬性值。假設第一個頁面為SendValues.aspx,在該頁面中(非*.cs代碼文件)添加兩個控件,設置如以下代碼所示。
<asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"></asp:TextBox>
<asp:Button runat="server" ID="btn6" Text="跨頁面?zhèn)魉头绞? PostBackUrl="~/GetValues.aspx" />
以上代碼中,TextBox控件的“Text”屬性為“Geforce TX280”,這是所需要傳送的值。而Button控件的“PostBackUrl”屬性指定了GetValues.aspx頁面,該頁面即可接收所需傳遞的值。在GetValues.aspx.cs的Page_Load方法中,編寫以下代碼。
//PreviousPage為向當前頁面?zhèn)鬏斂丶捻撁?BR>if (PreviousPage != null)
{
//從PreviousPage容器中搜索“ID”為PbValue的控件,并轉換為TextBox類型
TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");
//如果tb不是空引用
if (tb != null)
{
//將tb的“Text”屬性值給str變量
string str = tb.Text;
}
}
以上代碼輕松獲得了前一個頁面中TextBox控件的“Text”屬性值,這種方法比調用HttpServerUtility對象的Transfer方法更加快捷,并減少了處理步驟。
以上為常用的頁面間傳值方法,如果有特殊需要,還可以使用其他方法,例如通過數據庫存儲臨時數據等。

相關文章

  • .net如何使用Cache框架給程序添加Cache

    .net如何使用Cache框架給程序添加Cache

    這篇文章主要為大家詳細介紹了使用.net的Cache框架快速實現Cache操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Asp.Net程序目錄下文件夾或文件操作導致Session失效的解決方案

    Asp.Net程序目錄下文件夾或文件操作導致Session失效的解決方案

    這篇文章主要介紹了Asp.Net程序目錄下文件夾或文件操作導致Session失效的解決方案,需要的朋友可以參考下
    2017-06-06
  • .NET獲取客戶端的操作系統(tǒng)版本、瀏覽器版本和IP地址

    .NET獲取客戶端的操作系統(tǒng)版本、瀏覽器版本和IP地址

    這篇文章主要為大家詳細介紹了.NET如何獲取客戶端的操作系統(tǒng)版本、瀏覽器版本和IP地址,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • asp.net 表單驗證新思路

    asp.net 表單驗證新思路

    產生環(huán)境:我們編程時,常常會碰到很多表單,有的表單,項目超多,我做過最長的有80多項,眼睛真的是看得發(fā)痛。于是想出這樣一個偷懶的辦法。
    2010-02-02
  • 模擬QQ心情圖片上傳預覽示例

    模擬QQ心情圖片上傳預覽示例

    目前js端不支持獲取本地圖片進行預覽,正好在做一款類似于QQ心情的發(fā)布框,找了不少jquery插件,先粘上以下插件,感興趣的朋友可以參考下
    2013-08-08
  • asp.net“服務器應用程序不可用” 解決方法

    asp.net“服務器應用程序不可用” 解決方法

    服務器應用程序不可用 您試圖在此 Web 服務器上訪問的 Web 應用程序當前不可用。請點擊 Web 瀏覽器中的“刷新”按鈕重試您的請求。 管理員注意事項: 詳述此特定請求失敗原因的錯誤消息可在 Web 服務器的系統(tǒng)事件日志中找到。請檢查此日志項以查明導致該錯誤發(fā)生的原因。
    2008-10-10
  • GridView分頁的實現(通用分頁模板)

    GridView分頁的實現(通用分頁模板)

    要在GridView中加入AllowPaging=true,一頁數據多少行PageSize=10分頁時觸發(fā)的事件OnPageIndexChanging等等,感興趣的朋友可以了解下本文,希望對你有所幫助
    2013-04-04
  • .NET Core控制臺應用程序如何使用異步(Async)Main方法詳解

    .NET Core控制臺應用程序如何使用異步(Async)Main方法詳解

    這篇文章主要給大家介紹了關于.NET Core控制臺應用程序如何使用異步(Async)Main方法的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • asp.net關于Cookie跨域(域名)的問題

    asp.net關于Cookie跨域(域名)的問題

    Cookie是一個偉大的發(fā)明,它允許Web開發(fā)者保留他們的用戶的登錄狀態(tài)。但是當你的站點有一個以上的域名時就會出現問題了。在Cookie規(guī)范上說,一個cookie只能用于一個域名,不能夠發(fā)給其它的域名。因此,如果在瀏覽器中對一個域名設置了一個cookie,這個cookie對于其它的域名將無效。如果你想讓你的用戶從你的站點中的其中一個進行登錄,同時也可以在其它域名上進行登錄,這可真是一個大難題。
    2012-12-12
  • smtp發(fā)送帶附件的郵件代碼分享

    smtp發(fā)送帶附件的郵件代碼分享

    本文給大家分享一段smtp發(fā)送帶附件郵件的代碼,代碼非常簡潔易懂,有需要的小伙伴可以參考下。
    2014-11-11

最新評論

高淳县| 东丰县| 平凉市| 中方县| 金寨县| 嘉峪关市| 泰安市| 皋兰县| 乌兰察布市| 电白县| 随州市| 红原县| 宁夏| 固安县| 秦安县| 吉安市| 莲花县| 德化县| 阿拉尔市| 双江| 三穗县| 辛集市| 健康| 平邑县| 宁蒗| 酒泉市| 永嘉县| 苗栗县| 大姚县| 新沂市| 福贡县| 宜兴市| 阳西县| 新巴尔虎左旗| 民和| 江达县| 友谊县| 嘉兴市| 漯河市| 巨鹿县| 炉霍县|