




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
c#第13章ASPNETWeb應(yīng)用程序開發(fā)第一頁,共33頁。13.1Web應(yīng)用程序中的常用對(duì)象在Web應(yīng)用程序運(yùn)行時(shí),ASP.NET將維護(hù)與當(dāng)前應(yīng)用程序、每個(gè)用戶會(huì)話、當(dāng)前HTTP請(qǐng)求、請(qǐng)求的Web窗體頁等有關(guān)的信息。ASP.NET頁框架包含一系列封裝此上下文信息的類。在代碼中使用這些類的實(shí)例訪問內(nèi)部對(duì)象。第二頁,共33頁。13.1Web應(yīng)用程序中的常用對(duì)象(續(xù))常用的對(duì)象及對(duì)應(yīng)類對(duì)象名說明ASP.NET類Response提供對(duì)當(dāng)前頁的輸出流的訪問HttpResponseRequest提供對(duì)當(dāng)前頁請(qǐng)求的訪問HttpRequestServer公開可以用于在頁之間傳輸控件的實(shí)用工具方法,對(duì)HTML文本進(jìn)行編碼和解碼等HttpServerUtilityApplication提供對(duì)作用于所有會(huì)話的應(yīng)用程序范圍的方法和事件的訪問等HttpApplicationStateSession為當(dāng)前用戶會(huì)話提供信息等HttpSessionState第三頁,共33頁。13.1.1Response與RequestResponse對(duì)象:用于向客戶端發(fā)送信息,該對(duì)象提供了很多有用的屬性和方法,常用有:1)Response.Write方法,用于將字符、字符串、字符數(shù)組寫入HTTP輸出內(nèi)容流。例如:Response.Write("thisisatest.");2)Response.WriteFile方法,用于將指定的文件寫入HTTP輸出內(nèi)容流。例如:Response.WriteFile("test.txt");3)Response.Redirect方法,用于將客戶端重定向到新的URL。例如:Response.Redirect("test.aspx");第四頁,共33頁。13.1.1Response與RequestRequest對(duì)象:獲取請(qǐng)求的頁的HttpRequest對(duì)象。該對(duì)象使ASP.NET能夠讀取客戶端在Web請(qǐng)求期間發(fā)送的HTTP值。例如:Request.Browser.Platform客戶端使用的操作系統(tǒng)Request.Browser.Type客戶端使用的瀏覽器類型Request.UserHostAddress客戶端IP地址例13-1第五頁,共33頁。protectedvoidPage_Load(objectsender,EventArgse){//在此處放置用戶代碼以初始化頁面string[]weekDays={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};DateTimenow=DateTime.Now;LabelDateTime.Text=string.Format("今天是{0:yyyy年M月d日}{1}",now,weekDays[(int)now.DayOfWeek]);
LabelInfo.Text=string.Format("您當(dāng)前的操作系統(tǒng)是:{0},使用的瀏覽器為:{1},IP地址為:{2}",Request.Browser.Platform,Request.Browser.Type,Request.UserHostAddress);}第六頁,共33頁。13.1.2Application與Session對(duì)象Application對(duì)象是一個(gè)應(yīng)用程序級(jí)的對(duì)象,它包含的數(shù)據(jù)可以在整個(gè)Web站點(diǎn)中被所有用戶使用,并且可以在網(wǎng)站運(yùn)行期間持久地保存數(shù)據(jù),即利用Application對(duì)象可以定義類似于所有用戶公用的全局變量。由于Application對(duì)象被整個(gè)網(wǎng)站的所有用戶使用,所以對(duì)其進(jìn)行操作時(shí),需要先進(jìn)行鎖定,操作完成后再解除鎖定。Application.Lock();Application["counter"]=(int)Application["counter"]+1;Application.UnLock();第七頁,共33頁。13.1.2Application與Session對(duì)象(續(xù))Session對(duì)象可以用來區(qū)分不同的瀏覽器客戶。當(dāng)不同的瀏覽器客戶訪問服務(wù)器應(yīng)用程序時(shí),服務(wù)器會(huì)分別為其分配一段內(nèi)存空間用于保存不同用戶的數(shù)據(jù)信息,即每一個(gè)客戶都可以有自己的Session。
定義與使用Session的方法:
Session["online"]=true;Session["counter"]=(int)Session["counter"]+1;第八頁,共33頁。13.2Global.asax文件Global.asax文件也稱為ASP.NET應(yīng)用程序文件,該文件是一個(gè)可選的文件,它包含響應(yīng)ASP.NET或HTTP模塊所引發(fā)的應(yīng)用程序級(jí)別和會(huì)話級(jí)別事件的代碼。Global.asax文件駐留在ASP.NET應(yīng)用程序的根目錄中。運(yùn)行ASP.NET應(yīng)用程序時(shí),ASP.NET會(huì)自動(dòng)分析Global.asax并將其編譯到一個(gè)動(dòng)態(tài)生成的.NETFramework類中。由于Global.asax文件不是必需的,因此只在希望處理應(yīng)用程序事件或會(huì)話事件時(shí),才應(yīng)該創(chuàng)建該文件。第九頁,共33頁。Global.asax文件中包含的常用事件:1)Application_Start事件第一個(gè)客戶首次請(qǐng)求頁面時(shí)觸發(fā)。2)Session_Start事件每個(gè)客戶首次請(qǐng)求頁面時(shí)都觸發(fā)。3)Session_End事件在關(guān)閉應(yīng)用程序或者每個(gè)客戶在規(guī)定時(shí)間內(nèi)沒有提出請(qǐng)求時(shí)觸發(fā)。4)Application_End事件在關(guān)閉應(yīng)用程序或者最后一個(gè)客戶在規(guī)定時(shí)間內(nèi)沒有提出請(qǐng)求時(shí)觸發(fā)。例13-2第十頁,共33頁。voidApplication_Start(objectsender,EventArgse){Application["counter"]=0;Application["userCounter"]=0;System.Data.SqlClient.SqlConnectionconn=newSystem.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);System.Data.SqlClient.SqlCommandcommand=newSystem.Data.SqlClient.SqlCommand("select*fromlogincount",conn);System.Data.SqlClient.SqlDataReaderrd=null;conn.Open();rd=command.ExecuteReader();if(rd.Read()){Application["userCounter"]=Convert.ToInt32(rd["count"]);}rd.Close();conn.Close();}第十一頁,共33頁。voidSession_Start(objectsender,EventArgse){Application.Lock();Application["counter"]=(int)Application["counter"]+1;Application["userCounter"]=(int)Application["userCounter"]+1;
//統(tǒng)計(jì)網(wǎng)站登錄次數(shù)SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);conn.Open();
SqlCommandcommand=newSqlCommand(string.Format("updatelogincountsetcount={0}",(int)Application["userCounter"]),conn);command.ExecuteNonQuery();conn.Close();Application.UnLock(); Session["userName"]="";Session["id"]="";//在線論壇用Session["zhuti"]="";//在線論壇用}
第十二頁,共33頁。voidSession_End(objectsender,EventArgse){Application.Lock();Application["counter"]=(int)Application["counter"]-1;Application.UnLock();}第十三頁,共33頁。13.3網(wǎng)頁的切換與數(shù)據(jù)傳遞常用有下面幾種切換網(wǎng)頁的方法:1)利用鏈接切換到新網(wǎng)頁,比如使用HyperLink控件直接鏈接到其他網(wǎng)頁。2)利用客戶端腳本和HTML控件切換到新網(wǎng)頁,比如利用客戶端腳本的open、ShowModalDialog、ShowModallessDialog以及HTML的IFRAME等。3)使用Response.Redirect方法切換到新的網(wǎng)頁。4)使用Server.Transfer方法切換到新的網(wǎng)頁。第十四頁,共33頁。13.3網(wǎng)頁的切換與數(shù)據(jù)傳遞(續(xù))Response.Redirect和Server.Transfer方法均可以在代碼隱藏類中編寫代碼切換到新的網(wǎng)頁,不同點(diǎn):Response.Redirect方法不限于.aspx網(wǎng)頁,也不限于當(dāng)前網(wǎng)站。Server.Transfer方法只能切換到同一個(gè)應(yīng)用程序.aspx網(wǎng)頁。Response.Redirect方法切換到新網(wǎng)頁之后,瀏覽器的地址欄將顯示新的網(wǎng)址,Server.Transfer方法切換到新的網(wǎng)頁后,瀏覽器的地址欄仍然顯示原來的地址,相對(duì)來說保密性好一些。Response.Redirect方法只適用于傳遞小于2KB的參數(shù)數(shù)據(jù)。Server.Transfer方法則可以傳遞超過2KB的參數(shù)信息。第十五頁,共33頁。13.3網(wǎng)頁的切換與數(shù)據(jù)傳遞(續(xù))網(wǎng)頁間傳遞數(shù)據(jù)的方法常用有:
使用QueryString傳遞數(shù)據(jù),例13-3
利用Session對(duì)象傳遞或共享數(shù)據(jù),13-4
利用PreviousPage屬性獲取數(shù)據(jù),13-5第十六頁,共33頁。使用QueryString傳遞數(shù)據(jù)
在切換到另一個(gè)網(wǎng)頁時(shí)直接在網(wǎng)頁的ULR后加傳遞的參數(shù),第一個(gè)參數(shù)前用“?”和網(wǎng)頁名分隔,有多個(gè)參數(shù)時(shí),各參數(shù)之間用“&”分隔,每個(gè)參數(shù)的形式為“變量名=值”。而在另一個(gè)網(wǎng)頁中使用Request.QueryString[stringName]接收傳遞的參數(shù)。如果傳遞的參數(shù)中包含漢字、?、&等特殊符號(hào),則需要在傳遞時(shí)進(jìn)行Url編碼,例如:Server.Transfer(string.Format("test.aspx?name={0}&pwd={1}",
Server.UrlEncode(TextBoxName.Text),Server.UrlEncode(TextBoxPwd.Text)));第十七頁,共33頁。使用QueryString傳遞數(shù)據(jù)接收傳遞的參數(shù)時(shí),再進(jìn)行Url解碼,例如:protectedvoidPage_Load(objectsender,System.EventArgse){Response.Write("姓名:"+Server.UrlDecode(Request.QueryString["name"]));stringstr="";Response.Write(str.PadRight(5,'\u3000')+"密碼:"+Server.UrlDecode(Request.QueryString["pwd"])+"<br/>");Response.Write("您好,歡迎您登錄本網(wǎng)站!");}第十八頁,共33頁。利用Session對(duì)象傳遞或共享數(shù)據(jù)由于每個(gè)用戶都可以有自己的Session,而創(chuàng)建的Session對(duì)象所擁有的,并不局限于某一個(gè)網(wǎng)頁,所以可以使用Session對(duì)象傳遞數(shù)據(jù)。注意:使用Session會(huì)占用服務(wù)器的內(nèi)存資源,并且所有信息將一直存儲(chǔ)在內(nèi)存中直到Session過期。所以與直接向下頁傳遞信息相比,使用Session傳值時(shí)系統(tǒng)開銷較大。第十九頁,共33頁。利用PreviousPage屬性獲取數(shù)據(jù)位于同一個(gè)應(yīng)用程序中的兩個(gè)ASP.NET網(wǎng)頁,其中一個(gè)網(wǎng)頁可以使用頁面的PreviousPage屬性來獲取另一個(gè)網(wǎng)頁中的公共屬性或是控件值。
在使用前必須在本網(wǎng)頁的源代碼中添加代碼:
<%@PreviousPageTypeVirtualPath="~/SourcePage.aspx"%>意思是指出本網(wǎng)頁的前一個(gè)網(wǎng)頁是哪個(gè)網(wǎng)頁。第二十頁,共33頁。利用PreviousPage屬性獲取數(shù)據(jù)(續(xù))【例13-5】利用PreviousPage屬性獲取前一網(wǎng)頁的公共屬性。(1)在login.aspx.cs的login類中添加屬性。publicstringUsername{get{returnTextBoxName.Text;}}(2)修改ButtonLogin的Click事件代碼如下:protectedvoidButtonLogin_Click(objectsender,EventArgse){Server.Transfer("test.aspx");}第二十一頁,共33頁。利用PreviousPage屬性獲取數(shù)據(jù)(續(xù))
(3)切換到test.aspx的【源】視圖,在第2行添加:<%@PreviousPageTypeVirtualPath="~/login.aspx"%>
(4)修改test.aspx的Page_load代碼如下:protectedvoidPage_Load(objectsender,EventArgse){Response.Write("姓名:"+(string)PreviousPage.Username));}也可以使用PreviousPage.FindControl獲取前一個(gè)網(wǎng)頁中的控件值。例如在test.aspx頁面中添加一個(gè)Label1控件,顯示login.aspx頁面中的TextBoxName控件的值,則只需要修改test.aspx的Page_load中的代碼為如下代碼:第二十二頁,共33頁。利用PreviousPage屬性獲取數(shù)據(jù)(續(xù))if(Page.PreviousPage!=null){TextBoxSourceTextBox=(TextBox)Page.PreviousPage.FindControl("TextBoxName");if(SourceTextBox!=null){Label1.Text=SourceTextBox.Text;}}第二十三頁,共33頁。protectedvoidButtonLogin_Click(objectsender,EventArgse){//例13-3//Server.Transfer(string.Format("test.aspx?name={0}&pwd={1}",Server.UrlEncode(TextBoxName.Text),Server.UrlEncode(TextBoxPwd.Text)));//例13-4/*Session["name"]=TextBoxName.Text;Session["pwd"]=TextBoxPwd.Text;Response.Redirect("test.aspx");*///例13-5//Server.Transfer("test.aspx");stringname=TextBoxName.Text;stringpwd=TextBoxPwd.Text;if(name.IndexOf("'")>-1||name.IndexOf('')>-1||name.IndexOf('"')>-1||pwd.IndexOf("'")>-1||pwd.IndexOf('')>-1||pwd.IndexOf('"')>-1){LabelState.Text="用戶名或密碼包含有非法字符!";return;}第二十四頁,共33頁。
//數(shù)據(jù)庫連接,實(shí)現(xiàn)用戶身份認(rèn)證SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);SqlCommandcommand=newSqlCommand("SelectUser",conn);
command.CommandType=CommandType.StoredProcedure;SqlParameterUserName=command.Parameters.Add("@name",SqlDbType.NVarChar,30);UserName.Value=TextBoxName.Text;SqlParameterUserPwd=command.Parameters.Add("@pwd",SqlDbType.VarChar,20);UserPwd.Value=TextBoxPwd.Text;conn.Open();try{SqlDataReaderdr=command.ExecuteReader();
第二十五頁,共33頁。if(dr.Read()==true){Session["userName"]=name;LabelState.Text="用戶"+name+"登錄成功。";Server.Transfer("index.aspx");}else{Session["userName"]="";LabelState.Text="登錄失敗,無此用戶名或密碼不正確!";}dr.Close();}catch(Exceptionerr){LabelState.Text="系統(tǒng)錯(cuò)誤:"+err.Message;}conn.Close();}第二十六頁,共33頁。publicstringUsername{get{returnTextBoxName.Text;}}publicstringUserpwd{get{returnTextBoxPwd.Text;}}protectedvoidButtonRegister_Click(objectsender,EventArgse){Server.Transfer("register.aspx");//注意,網(wǎng)站內(nèi)須添加Web窗體register.aspx用于用戶注冊(cè)。}第二十七頁,共33頁。protectedvoidPage_Load(objectsender,EventArgse){//例13-3/*Response.Write("姓名:"+Request.QueryString[Server.UrlDecode("name")]);stringstr="";//str.PadRight(5,'\u3000')的功能為在str的右邊填充全角空格使其長度為5Response.Write(str.PadRight(5,'\u3000')+"密碼:"+Request.QueryString["pwd"]+"<br/>");Response.Write("您好,歡迎您登錄本網(wǎng)站!");*///例13-4/*//+"".PadRight(3,'\u3000')的含義是添加3個(gè)全角空格Response.Write("姓名:"+Session["name"].ToString()+"".PadRight(3,'\u3000'));Response.Write("密碼:"+Session["pwd"].ToString()+"<br/>");Response.Write("您好,歡迎您登錄本網(wǎng)站!");*/第二十八頁,共33頁。//例13-5/*Response.Write("姓名:"+(string)PreviousPage.Username+"".PadRight(3,'\u3000'));Response.Write("密碼:"+(string)PreviousPage.Userpwd+"<br/>");Response.Write("您好,歡迎您登錄本網(wǎng)站!");*///讀取前一網(wǎng)頁控件的值/*if(Page.PreviousPage!=null){TextBoxSourceTextBox=(TextBox)Page.PreviousPage.FindControl("TextBoxName");if(SourceTextBox!=null){Label1.Text=SourceTextBox.Text;}}*/}第二十九頁,共33頁。13.4在Web.Config中保存配置為了提高擴(kuò)展性和靈活性,ASP.NET專門設(shè)置一個(gè)Web.Config文件來保存配置信息。Web.Config不一定要放在Web應(yīng)用程序的根目錄下。同一個(gè)Web應(yīng)用程序下的所有子目錄都可以擁有自己的Web.Config文件。此時(shí)IIS會(huì)先繼承根目錄下的配置設(shè)置,如果碰到相同的配置標(biāo)記,則現(xiàn)行目錄下的Web.Config配置將覆蓋根目錄下同名的配置設(shè)置。Web.Config中包含許多配置節(jié),這些節(jié)有些是通用的,另外也允許開發(fā)者自定義所需要的節(jié),并加上特定的節(jié)標(biāo)記。第三十頁,共33頁。protectedvoidButtonOk_Click(objectsender,EventArgse){//新用戶注冊(cè)代碼SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);SqlCommandcommand=newSqlCommand("CheckUser",conn);command.CommandType=CommandType.StoredProcedure;SqlParameterUserName=command.Paramet
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2021深圳育才中學(xué)(初中)小學(xué)三年級(jí)數(shù)學(xué)下期末一模試卷帶答案
- 安裝鐵塔施工方案
- 2024年黑龍江大慶中考滿分作文《詩中誦出赤子心》
- 個(gè)人購銷合同范例范例
- 修路個(gè)人勞務(wù)合同范例
- 合伙餐廳合同范本
- 跨部門合作的工作計(jì)劃實(shí)例
- 鄉(xiāng)村樹苗銷售合同范例
- 學(xué)生自我管理與目標(biāo)追蹤計(jì)劃
- 培養(yǎng)員工潛能與激勵(lì)方式計(jì)劃
- Unit2 Special days 單元整體教學(xué)設(shè)計(jì)(1.2) 人教版新起點(diǎn)(一年級(jí)起點(diǎn))五年級(jí)下冊(cè)
- 內(nèi)審員培訓(xùn)班考核試題
- 酒店客房部考核細(xì)則模板
- 介紹人提成協(xié)議合同書
- 絲綢之路漫談 知到智慧樹網(wǎng)課答案
- 【特級(jí)教師上優(yōu)課】《黃河頌》名師課件
- 手術(shù)出血量的評(píng)估
- 材料的選擇-綜合材料
- (高清版)DZT 0330-2019 砂巖熱儲(chǔ)地?zé)嵛菜毓嗉夹g(shù)規(guī)程
- 消防安全治本攻堅(jiān)三年行動(dòng)方案
- 濟(jì)南版八年級(jí)生物下冊(cè)生態(tài)系統(tǒng)的自我調(diào)節(jié)課件
評(píng)論
0/150
提交評(píng)論