C#開發學習——.net C#中頁面之間傳值傳參的方法以及內置對象,
1.QueryString是一種非常簡單的傳值方式,他可以將傳送的值顯示在浏覽器的地址欄中。如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可以使用這個方法。但是對於傳遞數組或對象的話,就不能用這個方法了。下面是一個例子:
private void Button1_Click(object sender, System.EventArgs e)
{ string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
query傳值又分類post ,get格式如:
//post請求
string name = Request["name"].toString();
string name =Request.Form.Get("name").toString();
//get請求
string name = Request.QueryString["name"].toString();
但我發現 不論是post 和 get 傳值都可用
string name = Request["name"].toString();
表單提交中get和post方式的區別歸納如下幾點:
1. get是從服務器上獲取數據,post是向服務器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5. get安全性非常低,post安全性較高。
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;
}
下面介紹一下傳值缺點和優點
cookie
方式:將數據存在客戶端的經典方法。
缺點:安全性低、受客戶端設置限制、一個站點僅存20個cookie,每個容量4096字節。
Session
方式:將用戶數據存儲在服務端。
特點:asp.net中可以設置session的存儲方式、位置、SessionID的保存是否依賴cookie。
可以直接存儲對象。
缺點:asp.net中有失效的隱患
Cache
方式:將用戶數據存儲在服務端數據緩存中。
特點:可以大大提高效率。 可以直接存儲對象。
Appliction
方式: 將數據存儲於此,相當於全局變量。
特點:可以直接存儲對象。整個站點的共享數據
ViewState
方式:asp.net特有機制,用來恢復頁面狀態。
特點:將頁面各控件及其所存數據序列化存在name為_ViewState的隱藏域中。
缺點:存在HTML中,安全性較低。可以設置加密和驗證,但數據量會大增、效率有影響。
Static
方式: 將數據存於靜態變量中。
特點:利於提高效率。
缺點:若用不好會致使用戶或頁面間數據紊亂,造成極大的隱患。建議只賦值一次,絕對禁止為單個用戶而更改此值。
ASP.NET 內置對象包括 1.Response 2.Request 3.Server 4.Application 5.Session 6.Cookie
1
Request對象主要是讓服務器取得客戶端浏覽器的一些數據,包括從HTML表單用Post或者GET方法傳遞的參數、Cookie和用戶認證。
2 Request對象是Page對象的成員之一。
3 程序中不需要做任何的聲明即可直接使用;其類名為 HttpRequest屬性很多,但方法很少,只有一個BinaryRead()
1.使用Request.Form屬性獲取數據
通過該屬性,讀取之間的表單數據.
注意:提交方式要設置為“Post”。與Get方法相比較,使用Post方法可以將大量數據發送到服務器端
2.利用Request.QueryString屬性獲取數據
Request對象的QuerySting屬性可以獲取 HTTP 查詢字符串變量集合 。 通過該屬性,我們可以讀取地址信息 http://localhost/aaa.aspx?uid=tom&pwd=abc其中標識為紅色部分的數據.注意:提交方式要設置為“Get”
3.問題:Request.Form用於表單提交方式為Post的情況,而Request.QueryString用於表單提交方式為Get的情況,如果用錯,則獲取不到數據。
解決方法:利用Request(“元素名”)來簡化操作。
Response對象:將數據從服務器發送到浏覽器
1. <%=…%>Response.Write("alert('歡迎學習ASP.NET')")
Response.Write(" ")
2.Response對象的Redirect方法將客戶端浏覽器重定向到另外的URL上,即跳轉到另一個網頁。例如:Response.Redirect("http://www.example.com/")
3. Response.End() 終止當前頁的運行
4.Response.WriteFile(FileName)其中:FileName 指代需向浏覽器輸出的文件的文件名
Server對象提供對服務器上的方法和屬性進行的訪問 .其類名稱是HttpServerUtility.
Server對象的主要屬性有
MachineName:獲取服務器的計算機名稱。
ScriptTimeout:獲取和設置請求超時(以秒計)。
方法名稱 說明
CreateObject 創建 COM 對象的一個服務器實例。
Execute 執行當前服務器上的另一個aspx頁,執行完該頁後再返回本頁繼續執行
HtmlEncode 對要在浏覽器中顯示的字符串進行HTML編碼並返回已編碼的字符串。
HtmlDecode 對HTML編碼的字符串進行解碼,並返回已解碼的字符串。
MapPath 返回與 Web 服務器上的指定虛擬路徑相對應的物理文件路徑。
Transfer 終止當前頁的執行,並為當前請求開始執行新頁。
UrlEncode 將代表URL的字符串進行編碼,以便通過 URL 從 Web 服務器到客戶端進行可靠的 HTTP 傳輸。
UrlDecode 對已被編碼的URL字符串進行解碼,並返回已解碼的字符串。
UrlPathEncode 對 URL 字符串的路徑部分進行 URL 編碼,並返回已編碼的字符串。
編碼:Server.HtmlEncode(“HTML代碼”)
解碼:Server.HtmlDecode(“已編碼的HTML”)
1.Server對象的MapPath方法將虛擬路徑或相對於當前頁的相對路徑轉化為Web 服務器上的物理文件路徑。
語法:
Server.MapPath(“虛擬路徑”)
String FilePath
FilePath = Server.MapPath(“/”)
Response.Write(FilePath)
Application對象在實際網絡開發中的用途就是記錄整個網絡的信息,如上線人數、在線名單、意見調查和網上選舉等。在給定的應用程序的多有用戶之間共享信息,並在服務器運行期間持久的保存數據。而且Application對象還有控制訪問應用層數據的方法和可用於在應用程序啟動和停止時觸發過程的事件。
1.使用Application對象保存信息Application(“鍵名”) = 值或Application(“鍵名”,值)
獲取Application對象信息變量名 = Application(“鍵名”)
或:變量名 = Application.Item(“鍵名”)
或:變量名 = Application.Get(“鍵名”) 更新Application對象的值
Application.Set(“鍵名”, 值)
刪除一個鍵
Application.Remove(“鍵名”, 值)
刪除所有鍵
Application.RemoveAll()或Application.Clear()
2.有可能存在多個用戶同時存取同一個Application對象的情況。這樣就有可能出現多個用戶修改同一個Application命名對象,造成數據不一致的問題。HttpApplicationState 類提供兩種方法 Lock 和 Unlock,以解決對Application對象的訪問同步問題,一次只允許一個線程訪問應用程序狀態變量。
關於鎖定與解鎖
鎖定:Application.Lock()
訪問:Application(“鍵名”) = 值
解鎖:Application.Unlock()
注意:Lock方法和UnLock方法應該成對使用。 可用於網站訪問人數,聊天室等設備。
3. 使用Application事件
在ASP.NET 應用程序中可以包含一個特殊的可選文件——Global.asax 文件,也稱作ASP.NET 應用程序文件,它包含用於響應 ASP.NET或HTTP模塊引發的應用程序級別事件的代碼。Global.asax 文件提供了7個事件,其中5個應用於Application對象
事件名稱 說明
Application_Start 在應用程序啟動時激發
Application_BeginRequest 在每個請求開始時激發
Application_AuthenticateRequest 嘗試對使用者進行身份驗證時激發
Application_Error 在發生錯誤時激發
Application_End 在應用程序結束時激發
Session即會話,是指一個用戶在一段時間內對某一個站點的一次訪問。
Session對象在.NET中對應HttpSessionState類,表示“會話狀態”,可以保存與當前用戶會話相關的信息。
Session對象用於存儲從一個用戶開始訪問某個特定的aspx的頁面起,到用戶離開為止,特定的用戶會話所需要的信息。用戶在應用程序的頁面切換時,Session對象的變量不會被清除。對於一個Web應用程序而言,所有用戶訪問到的Application對象的內容是完全一樣的;而不同用戶會話訪問到的Session對象的內容則各不相同。Session可以保存變量,該變量只能供一個用戶使用,也就是說,每一個網頁浏覽者都有自己的Session對象變量,即Session對象具有唯一性。
(1)將新的項添加到會話狀態中
語法格式為:
Session ("鍵名") = 值
或者
Session.Add( "鍵名" , 值)
(2)按名稱獲取會話狀態中的值
語法格式為:
變量 = Session ("鍵名")
或者
變量 = Session.Item("鍵名")
(3)刪除會話狀態集合中的項
語法格式為:Session.Remove("鍵名")
(4)清除會話狀態中的所有值
語法格式為:Session.RemoveAll()
或者Session.Clear()
(5)取消當前會話
語法格式為:Session.Abandon()
(6)設置會話狀態的超時期限,以分鐘為單位。
語法格式為:Session.TimeOut = 數值
Global.asax 文件中有2個事件應用於Session對象
事件名稱 說明
Session_Start 在會話啟動時激發
Session_End 在會話結束時激發
Cookie就是Web服務器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶的電腦上保存信息並且隨後再取回它。信息的片斷以‘鍵/值’對的形式存儲。
Cookie是保存在客戶機硬盤上的一個文本文件,可以存儲有關特定客戶端、會話或應用程序的信息,在.NET中對應HttpCookie類。
有兩種類型的Cookie:會話Cookie(Session Cookie)和持久性Cookie。
前者是臨時性的,一旦會話狀態結束它將不復存在;
後者則具有確定的過期日期,在過期之前Cookie在用戶的計算機上以文本文件的形式存儲。在服務器上創建並向客戶端輸出Cookie可以利用Response對象實現。
HttpCookie cookie = Request.Cookie["user"];//創建cookie對象
cookie.Expires = DateTime.MaxValue;//設置過期時間
cookie.Values.Add("Iaddress",a);//添加Cookie值
Response.AppendCookie(cookie); //將cookie添加到服務器相應
response.cookies[""].Values = 數據;//寫入數據,將服務器端的數據寫入客戶端
string c =request. cookie.Values["address"];//讀取數據