Page對象 Page對象是指向頁面自身的方式,在整個頁面的執行期內,均可以使用該對象 示例:數組 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="defautl.aspx.cs" Inherits="_default"%>瀏覽器
屬性安全 |
說明服務器 |
Language框架 |
指定頁面代碼和後置代碼使用的語言,須要注意的是,這裏支持微軟.NET框架中的語言jsp |
AutoEventWireup函數 |
設置頁面是否自動調用網頁事件(也就是在後置代碼中的Page_Load() 事件是否執行),默認(不寫時)爲true |
CodeFile |
指定代碼後置文件,後置代碼,該後置代碼與頁面是局部關係 |
Inherits |
頁面類 |
Request對象 Request對象封裝了由Web瀏覽器或其餘客戶端生成的 HTTP 請求的細節(參數、屬性和數據),提供從瀏覽器讀取信息或這讀取客戶端信息等功能,用於頁面請求期 Request對象是HttpRequest類的一個實例。它可以讀取客戶端在Web請求期間發送的HTTP值。
Request對象屬性 |
屬性 |
說明 |
屬性 |
說明 |
UserLanguages |
客戶端主機所使用的語言 |
Pathq |
當前網頁的相對地址 |
UserHostName |
客戶端主機的DNS名稱 |
IsSecureConnection |
目前聯機的安全性 |
userHostArrress |
客戶端主機的IP地址 |
IsAuthenticated |
目前聯機是否有效 |
UserAgent |
客戶端瀏覽器版本 |
Headers |
網頁的標題集合 |
Url |
當前要求的URL |
Form |
窗體變量 |
TotalBytes |
當前輸入的容量大小 |
Files |
客戶端上傳的文件 |
ServerVariables |
網頁的Server變量,集合中包含了服務器和客戶端的系統信息 |
Cookies |
HttpCookieCollection對象集合 |
RequestType |
客戶端網頁的傳送方式(Get/Post) |
HttpMethod |
目前客戶端網頁的傳送方式(Get/Post) |
RawUrl |
當前頁面的URL |
FilePath |
當前執行網頁的相對地址 |
QueryString |
瀏覽器地址欄後的參數 |
ContentType |
當前需求的MIME內容類型 |
PhysicalPath |
當前網頁在服務器端實際路徑 |
ContentEncoding |
客戶端瀏覽器的字符設置 |
ClientCertificate |
客戶端安全認證信息 |
Path |
獲取當前請求的虛擬路徑 |
PhysicalApplicationPath |
當前在服務器端執行的程序的實際路徑 |
ConnectionlD |
客戶端所提出的網頁瀏覽請求的聯機的ID |
AnnlicationPath |
當前運行程序的服務器端虛擬目錄 |
BinaryRead |
執行對當前輸入流進行指定字節數的二進制讀取 |
Params |
返回QueryString、Form、Cookies、ServerVariables的所有集合 |
Browser |
客戶端瀏覽器的信息(獲取有關正在請求的客戶端的瀏覽器功能的信息) |
示例:1、使用QuestString獲取 HTTP 查詢字符串變量集合 頁面1中有一鏈接地址進行參數傳遞: <a href = "QueryString.aspx?nameA='asp'&nameB='jsp'">查</a> 頁面2得到地址參數: //首次加載 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if(Request.QueryString["nameA"] != null && Request.QueryString["nameB"] != null) { string nameA = Request.QueryString["nameA"] as string ; string nameB = Request.QueryString["nameB"] as string ; } } } 2、使用Form獲取 HTTP 查詢字符串變量集合 頁面1中有一鏈接地址進行參數傳遞: <form name="formGet" method="get" action = "Form.aspx?nameA='asp'&nameB='jsp'"> </form> 頁面2得到地址參數: //首次加載 <Script Language="C#" Runat="Server"> void Page_Load(object sender, System.EventArgs e) { Response.Write(Request.Form["nameA"] + "<br>" +Request.QueryString["nameB"]); } </Script> Response對象 Response對象封裝返回到 HTTP 客戶端的輸出,提供向瀏覽器輸出信息或者發送指令,用於頁面執行期
Response對象的經常使用方法 |
Write(String str) |
能夠輸出指定的文本內容 |
End() |
可使用 Web 服務器中止當前的程序並返回結果 |
Rediect(String URL) |
能夠將也頁面重定向到另一個頁面 |
Page對象在後置頁面中的屬性 |
返回類型 |
語法 |
說明 |
示例 |
boolean |
IsPostBack |
獲取一個值,該值指定該頁是否正爲響應客戶端回發而加載,或者他是否正被首次加載或訪問 (true 說明是響應客戶端回發而加載 false 說明是首次加載或訪問) |
if (!IsPostBack) { this.txtName.Text = "請在此輸入用戶名"; this.txtPwd.Text = "請在此輸入密碼";} |
boolean |
IsCrossPagePostBack |
獲取一個值,該值指示跨頁回發中是否涉及該頁(判斷頁面是不是跨頁提交)( true 說明是跨頁提交false 說明不是跨頁提交) |
if (Page.IsCrossPagePostBack) {this.txtKeyWord.Text = "跨頁數據傳遞";} |
PreviousPage 的屬性和方法 |
返回類型 |
語法 |
說明 |
示例 |
boolean |
IsCrossPagePostBack |
獲取一個值,該值指示跨頁回發中是否涉及該頁(判斷頁面是不是跨頁提交)(true 說明是跨頁提交 false 說明不是跨頁提交) |
if (PreviousPage.IsCrossPagePostBack) { this.lblShow.Text = "跨頁數據傳遞"; } |
Control |
FindControl(String ID) |
在頁命名容器中搜索帶指定標識符的服務器控件。 |
((TextBox)this.PreviousPage.FindControl("txtKeyWord")).Text; |
ASP.NET頁面傳值 |
頁內傳值 |
//傳遞 protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { this.txtName.Text = "請在此輸入用戶名"; this.txtPwd.Text = "請在此輸入密碼";}} //接收數據 protected void btnSub_Click(object sender, EventArgs e){ Response.Write(this.this.txtName.Text + <br/>; + this.txtPwd.Text);} |
跨頁傳值 |
//接收數據 protected void Page_Load(object sender, EventArgs e){ if (Page.PreviousPage != null) { if (PreviousPage.IsCrossPagePostBack) { this.lblName.Text = "姓 名:" + ((TextBox)this.PreviousPage.FindControl("txtName")).Text; }}} |
頁面跳轉 |
重定向 |
Response.Redirect (String URL) |
protected void btnSub_Click(object sender, EventArgs e){ if(this.txtName.Text.Trim()=""||this.txtPwd.Text.Trim()=="") { Response.Write("請輸入姓名或密碼"); }else{Response.Redirect("welcome.aspx"); } } |
使用Button自帶的屬性 |
PostBackUrl單擊按鈕時所發送到的 URL |
|
|
|
|
單擊按鈕頁面跳轉傳參 //傳參 protected void btnSub_Click(object sender, EventArgs e) { Response.Write("<script>window.location.href='BookDetail.aspx?iSBN="+this.txtISBN.Text+"'</script>"); //Response.Redirect("BookDetail.aspx?iSBN=" + this.txtISBN.Text); } //接受 protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["iSBN"] != null) { iSBN = Request.QueryString["iSBN"].Trim(); this.ShowBook(id, iSBN); } } Cookie對象保持於客戶端的共享信息方式
單個寫入形式 |
Response.Cookies["Cookie 的名稱"].Value=變量值; //寫入 Cookie Response.Cookies("Cookie 的名稱").Expires= DateTime.Now.AddMonths(1); //設置 Cookie 時間(有效期爲一個月) string 變量名=Request.Cookies["Cookie 的名稱"].Value; //讀取 Cookie |
使用數組類型形式 |
HttpCookie hcCookie = new HttpCookie("Cookie 的名稱","值"); hcCookie.Values["子變量名稱1"] = 變量值; hcCookie.Values["子變量名稱2"] = 變量值; hcCookie.Expires = DateTime.Now.AddMonths(1); //有效期爲一個月 Response.Cookies.Add(hcCookie); string 變量名1 = Request.Cookies["Cookie 的名稱"]["counts"]; //讀取 Cookie |
Session 對象爲某個用戶提供共享信息,做用於用戶會話期 語法:Session["Session 名稱"] = 值; //存儲 變量 = Session["Session 名稱"] as 對象名; //讀取
Session對象的經常使用屬性和方法 |
屬性和方法 |
說明 |
SessionID 屬性 |
包含惟一的的用戶會話標識符,它可用於在整個會話過程當中記錄用戶信息 |
Timeout 屬性 |
用戶設置用戶超時的時間,單位爲分鐘。在該段時間內,用戶即便沒有任何操做,用戶狀態也不會被清除,注意此設置是針對服務器清除Session的時間而言,由於若是一段時間內沒有操做,服務器是沒法知道用戶是否在線,因此一超時時間爲限。而客戶端有本身的處理機制,不一樣的瀏覽器也不盡相同,通常關閉窗口就會形成Session失效。(默認爲20分鐘) |
IsNewSession 屬性 |
若是已按當前請求建立會話,那麼該屬性將返回true |
Clear 方法 |
從會話狀態集合中移除全部的鍵和值 |
Abandon方法 |
結束Session,取消當前會話(當前頁面全部代碼都執行結束之後纔會執行) |
Application 對象爲全部用戶提供共享信息,做用於整個應用程序運行期: 語法:Application["Application 名稱"] = 值; 變量 = Application["Application 名稱"]
Application 對象的經常使用屬性 |
|
說明 |
屬性 |
All |
返回所有的 Application 對象變量到一個對象數組 |
AllKeys |
返回所有的 Application 對象變量到一個字符串數組 |
Count |
取消 Application 對象變量的數值 |
Item |
容許使用索引或 Application 變量名稱傳回內容值 |
方法 |
Add |
新增一個 Application 對象變量 |
|
|
Clear |
清楚所有的 Application 對象變量 |
Get |
使用索引值或變量名稱傳回變量值 |
Set |
使用變量名稱更新一個 Application 對象變量的內容 |
Lock |
鎖定所有的 Application 變量 |
UnLock |
解除鎖定 Application 變量 |
ViewState Server對象該對對象是 JSP中沒有的,它提供了服務期端的一些屬性和方法。
Server對象的經常使用方法 |
HtmlEncode |
此方法帶有一個字符串參數,能夠將其編碼,使其在瀏覽器中正確顯示。好比但願在頁面輸入一個"<br>",又不想在瀏覽器中顯示成換行,則須要使用該方法 |
HtmlDecode |
此方法與HtmlEncode方法相反,對以編碼內容解碼 |
MapPath |
此方法帶有一個虛擬路徑,可返回該路徑的物理磁盤中的準去位置。此方法在Web開發過程當中使用頻率比較高。通常實現文件讀寫都須要該方法 |
UrlEncode |
對URL地址進行編碼。對於URL須要傳輸含有"#"、"&"等特殊自負的參數時,須要進行編碼,不然後面的內容不會被識別 |
Execute |
在當前頁面執行參數指定的頁面,執行完後繼續執行本頁面 |
Transfer |
參數指定的頁面處理完成後,頁面執行就結束,不像Execute那樣還要返回控制權給先前的頁面 |
Application,Session,Cookie,ViewState和Cache用法和區別 |
內置對象 |
信息量大小 |
做用域和保存時間 |
應用範圍 |
保存位置 |
Application |
任意大小 |
整個應用程序的生命期 |
整個應用程序/全部用戶 |
服務器端 |
Cache |
任意大小 |
能夠根據須要設定 |
整個應用程序/全部用戶 |
服務器端 |
Session |
小量,簡單的數據 |
用戶活動時間+一段延遲時間(通常爲20分鐘) |
單個用戶 |
服務器端 |
Cookie |
小量,簡單的數據 |
能夠根據須要設定 |
單個用戶 |
客戶端 |
Viewstate |
小量,簡單的數據 |
一個Web頁面的生命期 |
單個用戶 |
客戶端 |
隱藏域 |
小量,簡單的數據 |
一個Web頁面的生命期 |
單個用戶 |
客戶端 |
查詢字符串 |
小量,簡單的數據 |
直到下次頁面跳轉請求 |
單個用戶 |
客戶端 |
1.Application對象 Application用於保存全部用戶的公共的數據信息,若是使用Application對象,一個須要考慮的問題是任何寫操做都要在Application_OnStart事件(global.asax)中完成.儘管使用Application.Lock和Applicaiton.Unlock方法來避免寫操做的同步,可是它串行化了對Application對象的請求,當網站訪問量大的時候會產生嚴重的性能瓶頸.所以最好不要用此對象保存大的數據集合. 下面咱們作個在線用戶統計的例子來講明這個問題: (以文件的形式存放網站總訪問量) Code Global.asax類 using System;using System.Collections;using System.ComponentModel;using System.Web;using System.Web.SessionState; using System.IO; // Global 的摘要說明。 public class Global : System.Web.HttpApplication{ 必需的設計器變量。 private System.ComponentModel.IContainer components = null; private FileStream fileStream; private StreamReader reader;//讀字符流 private StreamWriter writer;//寫字符流 public Global() { InitializeComponent(); } protected void Application_Start(Object sender, EventArgs e) { Application["CurrentGuests"]=0;//初始花爲0; fileStream = File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);//文件不存在,建立文件 reader = new StreamReader(fileStream);//要讀取的完整路徑 Application["AllGuests"] = Convert.ToInt32(reader.ReadLine()); //從當前流中讀取一行字符並將數據做爲字符串返回 reader.Close();//關閉流 } protected void Session_Start(Object sender, EventArgs e)//當用戶訪問網站時,在線用戶+1,總訪問數+1 {Application.Lock();//同步,避免同時寫入 Application["CurrentGuests"] =(int)Application["CurrentGuests"]+ 1;//總在線用戶數 Application["AllGuests"] =(int)Application["AllGuests"]+ 1;//訪問網站的總用戶數 fileStream=new FileStream(Server.MapPath("counts.text"), FileMode.OpenOrCreate,FileAccess.ReadWrite);// writer = new StreamWriter(fileStream);//實現一個寫入流,使其以一種特定的編碼向流中寫入字符 writer.WriteLine(Application["AllGuests"].ToString());//把訪問網站的總用戶數再次寫入到文件 writer.Close();//關閉寫入流 Application.UnLock();//同步結束 } protected void Session_End(Object sender, EventArgs e)//當前用戶退出網站時,在線用戶數量-1, { Application.Lock(); Application["CurrentGuests"] =(int)Application["CurrentGuests"] - 1;//總在線用戶數量-1 Application.UnLock(); }} (2) WebForm1.aspx private void Page_Load(object sender, System.EventArgs e){ this.Label1.Text = "正在訪問站點的用戶數:" + Application["CurrentGuests"].ToString(); this.Label2.Text ="訪問過站點的總用戶數:" + Application["AllGuests"].ToString(); } 2.Session對象 Session用於保存每一個用戶的專用信息.每一個客戶端用戶訪問時,服務器都爲每一個用戶分配一個惟一的會話ID(Session ID) . 她的生存期是用戶持續請求時間再加上一段時間(通常20分鐘左右).Session中的信息保存在Web服務器內容中,保存的數據量可大可小.當Session超時或被關閉時將自動釋放保存的數據信息.因爲用戶中止使用應用程序後它仍然在內存中保持一段時間,所以使用Session對象使保存用戶數據的方法效率很低.對於小量的數據,使用Session對象保存仍是一個不錯的選擇.使用Session對象保存信息的代碼以下: Session["key"]="value"//存放信息 string UserName=Session["key"].ToString();//讀取數據 3.Cookie對象 Cookie用於保存客戶瀏覽器請求服務器頁面的請求信息,程序員也能夠用它存放非敏感性的用戶信息,信息保存的時間能夠根據須要設置.若是沒有設置Cookie失效日期,它們僅保存到關閉瀏覽器程序爲止.若是將Cookie對象的Expires屬性設置爲Minvalue,則表示Cookie永遠不會過時.Cookie存儲的數據量很受限制,大多數瀏覽器支持最大容量爲4K,所以不要用來保存數據集及其餘大量數據.因爲並不是全部的瀏覽器都支持Cookie,而且數據信息是以明文文本的形式保存在客戶端的計算機中,所以最好不要保存敏感的,未加密的數據,不然會影響網站的安全性.使用Cookie對象保存的代碼以下: Response.Cookies["key"].Value="value";//存放信息 string UserID=Response.Cookies["key"].Value; //讀取信息 4.ViewState對象 ViewState 經常使用於保存單個用戶的狀態信息,有效期等於頁面的生存期。跟隱藏控件類似。viewstate是在本頁面以內各函數間進行傳值的 , 至於爲何要使用這種方法是由於在一個事件發生以後 , 頁面可能會刷新 , 若是定義全局變量會被清零 , 因此要使用viewstate. ViewState容器能夠保持大量的數據,可是必須謹慎使用,由於過多使用會影響應用程序的性能。全部Web服務器控件都使用ViewState在頁面回發期音保存本身的狀態信息。若是某個控件不須要在回發期間保存狀態信息,最好關閉該對象的ViewState,避免沒必要要的資源浪費。經過給@Page指令添加「EnableViewState=false」屬性能夠禁止整個頁面的ViewState。使用ViewState對象保存信息的代碼以下。 ViewState["key"]="value";//存放信息 string NameID=ViewState["nameID"].ToString();//讀取信息 5.Cache對象 Cache對象用於在HTTP請求間保存頁面或數據。該對象的使用能夠極大地提升整個應用程序的效率。經常使用於將頻繁訪問的大量服務器資源存儲在內存中,當用戶發出相同的請求後服務器再也不次處理而是將Cache中保存的信息返回給用戶,節省了服務器處理請求的時間。其生存期依賴於該應用程序的生存期。當從新啓動應用程序時,將從新建立其Cache對象的實例。使用Cache對象保存信息的代碼以下。 Cache["nameID"]="0001";//存放信息 Cache.Insert("nameID","0001"1); //存放信息 string NameID=Cache["nameID"].ToString();//讀取信息 6.隱藏域 Hidden控件是屬於HTML類型的服務器控件,使用此控件能夠實現隱藏域的功能。其實此控件和其它服務器控件的使用沒有太大區別,只是它不會在用戶端的瀏覽器中顯示,始終處於隱藏狀態。可是每次頁面提交的時候,此控件和其它服務器控件一同提交到服務器端,所以在服務器端可使用Value屬性獲取或保存一些數據信息。使用Hidden控件保存信息的代碼以下。 Hidden.Value="0001";//存放信息 string NameID=Hidden.Value; //獲取信息 7.查詢字符串 查詢字符串的方式是將要傳遞的值鏈接在URL後面,而後經過Response.Redirect方法實現客戶端的重定向。這種方式能夠實如今兩個頁面之間傳遞信息。因爲URL的長度有必定的限制,所以不能傳遞太大的信息,加外安全性也不是很好。 //傳遞信息以下。(問號後面格式 key1=value1&key2=value2) Response.Redirect("List.aspx?nameID=0001&gradeID=002"); //執行上面的語句後在IE地址欄顯示的URL的代碼以下。 http://localhost/List.aspx?nameID=0001&grade=002 //當跳轉到List.aspx後,能夠經過如下代碼得到所傳遞的信息。 string NameID.GradeID; NameID=Request.Params["nameID"]; GradeID=Request.Params["gradeID"] |