ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第1頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第2頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第3頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第4頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

3.1一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序3.2關(guān)于ASP.NET3.3ASP.NET控件和內(nèi)置對(duì)象

Response Request Session Application Cookie第3

-1章開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第1頁(yè)3.1一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序【例11.1】基于C#簡(jiǎn)單ASP.NET應(yīng)用程序。這是一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序,其作用是將文本框中輸入字符串顯示在網(wǎng)頁(yè)上。創(chuàng)建步驟以下:(1)開(kāi)啟VS,選擇“文件”|“新建”|“項(xiàng)目”,打開(kāi)“新建項(xiàng)目”對(duì)話框。在此對(duì)話框“項(xiàng)目類(lèi)型”框中選擇“VisualC#”項(xiàng),在“模板”框中選擇“ASP.NETWeb應(yīng)用程序”,表示要?jiǎng)?chuàng)建基于C#ASP.NET應(yīng)用程序,將程序名設(shè)置為MyFirstWebApp:ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第2頁(yè)(2)單擊【確定】按鈕,然后在生成界面“處理方案資源管理器”中右擊“Default.aspx”節(jié)點(diǎn),在彈出菜單中選擇“視圖設(shè)計(jì)器”,以可打開(kāi)頁(yè)面視圖設(shè)計(jì)器。(3)將工具箱中三個(gè)控件拖到設(shè)計(jì)界面中,這三個(gè)控件分別是Label、TextBox和Button控件,并適當(dāng)設(shè)置它們屬性和位置:3.1一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第3頁(yè)(4)在設(shè)計(jì)界面中,雙擊【訪問(wèn)控件】按鈕,即可進(jìn)入到該按鈕事件處理函數(shù)中,實(shí)際上是在Default.aspx.cs文件中生成了Button1_Click函數(shù)。在該函數(shù)中,添加以下代碼:

Label1.Text=TextBox1.Text;Label1.Font.Size=20;(5)運(yùn)行程序MyFirstWebApp。方法是:按【Ctrl】+【F5】按鈕直接運(yùn)行,也能夠單擊快捷菜單欄上“開(kāi)啟調(diào)試”按鈕(相當(dāng)于按【F5】)。在打開(kāi)IE瀏覽器界面文本框中輸入一些字符串,然后單擊【訪問(wèn)控件】按鈕:——至此,一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序開(kāi)發(fā)完成。3.1一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第4頁(yè)讀者可能注意到,即使做是網(wǎng)頁(yè)程序,但沒(méi)有感覺(jué)到要編寫(xiě)任何網(wǎng)頁(yè)代碼(編寫(xiě)HTML代碼是一件煩雜事情),而只是進(jìn)行控件拖放、控件屬性設(shè)置以及C#代碼編寫(xiě),這與開(kāi)發(fā)C#窗體應(yīng)用程序幾乎沒(méi)有什么區(qū)分。這是ASP.NET對(duì)Web應(yīng)用程序設(shè)計(jì)極大改進(jìn)。造成這種改進(jìn)主要是因?yàn)?NET平臺(tái)采取了界面和代碼分開(kāi)策略,即網(wǎng)頁(yè)文件放在Default.aspx文件中,而C#代碼則放在Default.aspx.cs文件中。3.1一個(gè)簡(jiǎn)單ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序Default.aspx.cs文件是與頁(yè)面元素相關(guān)聯(lián)C#文件,它就是ASP.NET代碼隱藏地方。對(duì)ASP.NET應(yīng)用程序來(lái)說(shuō),這里就是程序員“用武之地”。前面指出“界面元素和代碼分開(kāi)”,指就是將程序文件分為ASP.NET應(yīng)用中.aspx文件和.aspx.cs文件。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第5頁(yè)ASP(ActiveServerPages)是Microsfot企業(yè)于1996年11月推出面向WEB應(yīng)用程序開(kāi)發(fā)技術(shù)框架,但它不是程序設(shè)計(jì)語(yǔ)言,也不是開(kāi)發(fā)工具。簡(jiǎn)單地,ASP主要是由“<%”和“%>”掛起來(lái)代碼嵌入到HTML中一個(gè)技術(shù)。這些代碼是在服務(wù)器端執(zhí)行,執(zhí)行時(shí)無(wú)需編譯,能夠用任何文本編輯器編寫(xiě)(如記事本等)。另外,ASP能夠經(jīng)過(guò)內(nèi)置組件實(shí)現(xiàn)更強(qiáng)大功效,如使用ADO能夠輕松地訪問(wèn)數(shù)據(jù)庫(kù)。ASP.NET則是從HTML發(fā)展到ASP,然后伴伴隨微軟.NET技術(shù)推出而出現(xiàn)。ASP.NET不是ASP簡(jiǎn)單升級(jí),而是全新一代動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)系統(tǒng),用于在一臺(tái)Web服務(wù)器上建立強(qiáng)大應(yīng)用程序。它是Microsoft.NET技術(shù)一個(gè)組成部分,是ASP和.NET技術(shù)結(jié)合產(chǎn)物。在MicrosoftVisualStudio/中,利用.NET提供控件,可快速開(kāi)發(fā)ASP.NET應(yīng)用程序,大大簡(jiǎn)化了編碼過(guò)程。3.2關(guān)于ASP.NET3.1.1創(chuàng)建ASP.NET應(yīng)用程序ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第6頁(yè)相對(duì)ASP而言,ASP.NET含有主要優(yōu)勢(shì)包含:實(shí)現(xiàn)界面和代碼分開(kāi)編譯執(zhí)行使用強(qiáng)類(lèi)型(strongly-type)編程語(yǔ)言3.2關(guān)于ASP.NET3.1.1創(chuàng)建ASP.NET應(yīng)用程序ASP.NET主要包含兩種編程模型:WebForm:提供了建立功效強(qiáng)大、外觀豐富基于表單(Form)可編程Web頁(yè)面,這幾乎與VB.NET、C#.NET窗體開(kāi)發(fā)界面是一樣WebService

:經(jīng)過(guò)對(duì)HTTP、XML、SOAP、WSDL等Internet標(biāo)準(zhǔn)支持提供在異構(gòu)網(wǎng)絡(luò)環(huán)境下獲取遠(yuǎn)程服務(wù)、連接遠(yuǎn)程設(shè)備、交互遠(yuǎn)程應(yīng)用編程界面ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第7頁(yè)ASP.NET提供了大量控件,當(dāng)用戶(hù)將控件拖到Web窗體設(shè)計(jì)界面時(shí),會(huì)自動(dòng)生成對(duì)應(yīng)HTML代碼和C#代碼。這為Web應(yīng)用程序可視化界面設(shè)計(jì)提供極大便利,防止了使用HTML標(biāo)識(shí)語(yǔ)言編寫(xiě)大量代碼麻煩。ASP.NET控件主要分為兩大類(lèi):Web窗體控件和HTML控件:3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第8頁(yè)對(duì)于Web窗體控件和HTML控件,需要注意以下幾點(diǎn):

(1)Web窗體控件是服務(wù)器端控件,即它們?cè)诜?wù)器端運(yùn)行,所以不要求客戶(hù)端瀏覽器支持Web窗體控件(如不要求安裝.NETFramework等),我們?cè)跒g覽器看到只是這些控件運(yùn)行后輸出結(jié)果;HTML控件是客戶(hù)端控件,只有瀏覽器支持這些控件,它們才能運(yùn)行。(2)Web窗體控件是以C#

為腳本語(yǔ)言,其功效十分強(qiáng)大。HTML控件則以javascript等為腳本語(yǔ)言,其功效較前者弱得多。(3)在設(shè)計(jì)界面上,當(dāng)雙擊Web窗體控件時(shí),會(huì)自動(dòng)在.cs文件中形成并打開(kāi)控件Click事件處理函數(shù)(C#語(yǔ)言),以供用戶(hù)編寫(xiě)代碼;當(dāng)雙擊HTML控件時(shí),則會(huì)自動(dòng)在.aspx文件中形成并打開(kāi)控件onclick事件處理函數(shù)(javascript語(yǔ)言)。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第9頁(yè)【例11.2】使用ASP.NET控件實(shí)現(xiàn)頁(yè)面之間傳遞數(shù)據(jù)ASP.NET應(yīng)用程序。本例介紹怎樣使用QueryString來(lái)處理這個(gè)問(wèn)題。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件(1)在VS中創(chuàng)建一個(gè)ASP.NET應(yīng)用程序testWebControlApp。(2)添加一個(gè)Web頁(yè),方法是:選擇“項(xiàng)目”|“添加新項(xiàng)”,在打開(kāi)“添加新項(xiàng)”對(duì)話框中選擇“Web窗體”。(3)在視圖設(shè)計(jì)器中打開(kāi)文件Default.aspx設(shè)計(jì)界面,然后在其設(shè)計(jì)界面中分別添加2個(gè)Label控件、2個(gè)TextBox控件和1個(gè)Button控件,并在屬性編輯器中修改Label和Button控件Text屬性、將TextBox控件ID分別改為username和password,還將后一個(gè)TextBox控件TextModel屬性值設(shè)置為password,以將框作為密碼輸入框。設(shè)計(jì)界面以下:ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第10頁(yè)(4)在視圖設(shè)計(jì)器中打開(kāi)文件WebForm1.aspx設(shè)計(jì)界面,在設(shè)計(jì)界面中直接添加2個(gè)Label控件即可,它們ID自動(dòng)被設(shè)置為L(zhǎng)abel1和Label2。(5)在文件Default.aspx設(shè)計(jì)界面中,雙擊【登錄】按鈕,在產(chǎn)生Click事件處理函數(shù)中添加以下代碼:

stringdataStr;dataStr="WebForm1.aspx?username="+username.Text+"&password="+password.Text;Response.Redirect(dataStr);(6)在文件WebForm1.aspx設(shè)計(jì)界面中,雙擊任意一個(gè)空白處,將自動(dòng)產(chǎn)生Page_Load函數(shù),在該函數(shù)中添加以下代碼:Label1.Text=Request.QueryString["username"];Label2.Text=Request.QueryString["password"];3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第11頁(yè)(7)運(yùn)行文件Default.aspx,在文本框中輸入用戶(hù)名和密碼。然后單擊【登錄】按鈕,結(jié)果輸入用戶(hù)名和密碼被傳送到文件WebForm1.aspx對(duì)應(yīng)頁(yè)面中。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件——從運(yùn)行結(jié)果能夠看到,Default.aspx頁(yè)面中數(shù)據(jù)已經(jīng)成功傳送到WebForm1.aspx頁(yè)面中。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第12頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第13頁(yè)1.Response對(duì)象系統(tǒng)依據(jù)用戶(hù)請(qǐng)求(打開(kāi)一個(gè)頁(yè)面)自動(dòng)創(chuàng)建一個(gè)Response對(duì)象。該對(duì)象用于向客戶(hù)端傳遞或輸出相關(guān)信息,這些信息包含用戶(hù)定義內(nèi)容、內(nèi)容報(bào)頭、服務(wù)器狀態(tài)等。其慣用屬性和方法包含:Buffer屬性該屬性用于設(shè)置服務(wù)器端是否開(kāi)啟緩存功效。假如其值為true,表示開(kāi)啟IIS緩存功效,這時(shí)服務(wù)器會(huì)處理整個(gè)頁(yè)面后再發(fā)給客戶(hù)端,這么用戶(hù)就能夠看到連續(xù)界面,當(dāng)然這是以犧牲服務(wù)器內(nèi)存資源為代價(jià);假如其值為false,表示不開(kāi)啟IIS緩存功效,這時(shí)服務(wù)器會(huì)一邊處理一邊發(fā)送,這時(shí)用戶(hù)看到界面可能是間斷。Expires屬性該屬性值表示頁(yè)面使用期,單位為分鐘。假如用戶(hù)請(qǐng)求其使用期滿(mǎn)之前相同頁(yè)面,將直接讀取顯示緩沖區(qū)中內(nèi)容,這個(gè)使用期間過(guò)后,頁(yè)面將不再保留緩沖區(qū)中內(nèi)容。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第14頁(yè)Write()方法該方法用于向客戶(hù)端輸出指定內(nèi)容,由客戶(hù)端解釋執(zhí)行。比如:Response.Write("今天日期時(shí)間:");Response.Write(DateTime.Now.ToString());Redirect()方法該方法用于重定向到指定URL。比如:Response.Redirect("/");//重定向到“搜狐”主頁(yè)Response.Redirect("WebForm1.aspx");//重定向到WebForm1.aspx頁(yè)面也能夠在重定向同時(shí)傳遞一些數(shù)據(jù),比如,以下語(yǔ)句在重定向到WebForm1.aspx頁(yè)面同時(shí)傳遞字符串“abc”:Response.Redirect("WebForm1.aspx?strname="+"abc");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第15頁(yè)AddHeade()方法增加HTTP頭集合中元素。如:Response.AddHeader("headname","headvalue");Clear()方法該方法用于清空IIS緩沖區(qū)中內(nèi)容(Response.Buffer為T(mén)rue時(shí))。Flush()方法執(zhí)行該方法時(shí),將IIS緩沖區(qū)中內(nèi)容發(fā)給客戶(hù)端(Response.Buffer為T(mén)rue時(shí)),對(duì)客戶(hù)端來(lái)說(shuō),其作用就是刷新網(wǎng)頁(yè)。End()方法當(dāng)程序執(zhí)行到該方法時(shí),將終止腳本處理,起到終止程序繼續(xù)運(yùn)行作用。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第16頁(yè)2.Request對(duì)象當(dāng)客戶(hù)端瀏覽器向ASP.NET服務(wù)器端程序發(fā)出請(qǐng)求時(shí),服務(wù)器端程序?qū)⑨槍?duì)請(qǐng)求答應(yīng)信息封裝在Request對(duì)象中,客戶(hù)端經(jīng)過(guò)調(diào)用Request對(duì)象屬性和方法能夠獲取想要信息。Request對(duì)象慣用屬性和方法包含:ApplicationPath屬性返回服務(wù)器上ASP.NET應(yīng)用程序虛擬根路徑(string類(lèi)型)。Path屬性返回當(dāng)前請(qǐng)求頁(yè)虛擬路徑(包含請(qǐng)求頁(yè)對(duì)應(yīng)

.aspx文件名)。PhysicalPath屬性返回與請(qǐng)求URL相對(duì)應(yīng)物理文件系統(tǒng)絕對(duì)路徑(包含請(qǐng)求頁(yè)對(duì)應(yīng)

.aspx文件名)。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第17頁(yè)P(yáng)hysicalApplicationPath屬性返回當(dāng)前正在執(zhí)行服務(wù)器應(yīng)用程序根目錄在物理文件系統(tǒng)中絕對(duì)路徑。ContentLength屬性返回所取得內(nèi)容長(zhǎng)度。ContentEncoding屬性返回所取得內(nèi)容編碼方式。ContentType屬性返回所取得內(nèi)容類(lèi)型。Headers屬性返回HTTP頭集合。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第18頁(yè)HttpMethod屬性返回客戶(hù)端使用HTTP數(shù)據(jù)傳輸方法,如GET、POST或HEAD。Url屬性返回當(dāng)前請(qǐng)求URL。Browser屬性這個(gè)屬性返回瀏覽器相關(guān)信息,這些信息十分豐富,包含瀏覽器是否支持ActiveX控件、是否為測(cè)試版、瀏覽器名稱(chēng)和版本號(hào)等信息。UserHostAddress屬性返回客戶(hù)機(jī)IP地址(string類(lèi)型)。利用這個(gè)屬性能夠拒絕惡意用戶(hù)訪問(wèn)。UserHostName屬性返回客戶(hù)機(jī)DNS名稱(chēng)。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第19頁(yè)QueryString屬性該屬性返回URL所帶附加信息項(xiàng)集合,集合類(lèi)型為System.Collections.Specialized.NameValueCollection,通慣用于實(shí)現(xiàn)頁(yè)面之間數(shù)據(jù)傳遞。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象比如,下面語(yǔ)句重定向到WebForm1.aspx頁(yè)面,同時(shí)傳遞三個(gè)信息項(xiàng):Response.Redirect("WebForm1.aspx?s1=str1&s2=str2&s3=str3");在WebForm1.aspx頁(yè)面中能夠用下面三條語(yǔ)句分別獲取這三項(xiàng)信息:strings;s=Request.QueryString["s1"];//結(jié)果s="str1"s=Request.QueryString["s2"];//結(jié)果s="str2"s=Request.QueryString["s3"];//結(jié)果s="str3"當(dāng)然,也能夠經(jīng)過(guò)下標(biāo)訪問(wèn)集合中元素來(lái)獲取信息項(xiàng):strings;System.Collections.Specialized.NameValueCollectionstrs=Request.QueryString;for(inti=0;i<strs.Count;i++){s=strs[i];}顯然,QueryString屬性通常與Response對(duì)象Redirect屬性搭配使用。實(shí)際上,例11.2中程序testWebControlApp已經(jīng)使用過(guò)這兩個(gè)屬性來(lái)實(shí)現(xiàn)頁(yè)面之間數(shù)據(jù)傳遞。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第20頁(yè)用Request對(duì)象獲取表單傳遞值使用Request對(duì)象Form屬性獲取表單傳遞信息,普通格式為:

Request.Form("表單元素名")

經(jīng)過(guò)POST方式發(fā)送數(shù)據(jù)不會(huì)顯示在URL中,所以POST發(fā)送數(shù)據(jù)會(huì)比GET發(fā)送安全。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第21頁(yè)用Request對(duì)象獲取服務(wù)器變量值當(dāng)用戶(hù)向服務(wù)器請(qǐng)求信息或者服務(wù)器對(duì)用戶(hù)請(qǐng)求做出應(yīng)答時(shí),他們信息都包含在HTTPHeader(HTTP頭)中。HTTP頭提供了相關(guān)請(qǐng)求和響應(yīng)附加信息,同時(shí)還包含瀏覽器生成請(qǐng)求和服務(wù)器做出響應(yīng)過(guò)程信息。經(jīng)過(guò)Request對(duì)象ServerVariables屬性,能夠取得當(dāng)前環(huán)境這些信息。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第22頁(yè)ServerVariables屬性該屬性是一個(gè)string類(lèi)型對(duì)象集合,它保留了服務(wù)器相關(guān)信息。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象比如,我們能夠用以下語(yǔ)句輸出該屬性包含全部相關(guān)服務(wù)器信息:for(inti=0;i<Request.ServerVariables.Count;i++){Response.Write((i+1).ToString()+":"+Request.ServerVariables[i].ToString()+"<br>");}普通情況下是經(jīng)過(guò)對(duì)象名稱(chēng)來(lái)訪問(wèn)ServerVariables屬性中相關(guān)服務(wù)器信息。慣用包含:Request.ServerVariables["Local_Addr"] //返回服務(wù)器IPRequest.ServerVariables["Path_Info"]//返回被請(qǐng)求頁(yè)虛擬路徑Request.ServerVariables["Path_Translated"]//返回被請(qǐng)求頁(yè)絕對(duì)路徑Request.ServerVariables["Server_Name"]//返回服務(wù)器名稱(chēng)Request.ServerVariables["Server_Port"] //返回服務(wù)器所使用端口Request.ServerVariables["Url"]//返回請(qǐng)求頁(yè)URL地址Request.ServerVariables[“REMOTE_ADDR”]//返回請(qǐng)求者IP地址ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第23頁(yè)3.Server對(duì)象Server對(duì)象封裝了服務(wù)器相關(guān)信息,利用該對(duì)象提供方法能夠獲取這些信息。MapPath()方法返回與Web服務(wù)器上指定虛擬路徑相對(duì)應(yīng)物理文件路徑,如Server.MapPath(“\\WebForm1.aspx”)返回“D:\VS\第11章\test1\test1\WebForm1.aspx”。Transfer()方法該方法與Response對(duì)象Redirect()方法含有相同調(diào)用方法。比如,下面兩個(gè)語(yǔ)句作用是一樣:Response.Redirect("WebForm1.aspx?s1=str1&s2=str2");Server.Transfer("WebForm1.aspx?s1=str1&s2=str2");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第24頁(yè)Transfer與Redirect區(qū)分:

Server.Transfer方法把執(zhí)行流程從當(dāng)前ASPX文件轉(zhuǎn)到同一服務(wù)器上另一個(gè)ASPX頁(yè)面。調(diào)用Server.Transfer時(shí),當(dāng)前ASPX頁(yè)面終止執(zhí)行,執(zhí)行流程轉(zhuǎn)入另一個(gè)ASPX頁(yè)面,但新ASPX頁(yè)面仍使用前一ASPX頁(yè)面創(chuàng)建應(yīng)答流。用Server.Transfer方法實(shí)現(xiàn)頁(yè)面之間導(dǎo)航,瀏覽器中URL不會(huì)改變,因?yàn)橹囟ㄏ蛲耆诜?wù)器端進(jìn)行,瀏覽器根本不知道服務(wù)器已經(jīng)執(zhí)行了一次頁(yè)面變換。Response.Redirect則是客戶(hù)端第一次請(qǐng)求服務(wù)器返回狀態(tài)代碼302及新URL,客戶(hù)端再次請(qǐng)求新URL,服務(wù)器再返回新頁(yè)面,比Server.Transfer多一次應(yīng)答。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第25頁(yè)注意使用方式Post表單請(qǐng)求表單不runat=“server”經(jīng)過(guò)提交按鈕自動(dòng)切換到Action對(duì)應(yīng)目標(biāo)頁(yè)面目標(biāo)頁(yè)能夠用Request.Form形式訪問(wèn)請(qǐng)求信息例(classexamples\1-1)非Post表單-Web窗體表單Runat=“server”,無(wú)提交按鈕Request.QueryStringServer.TransferASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第26頁(yè)Web窗體表單傳遞數(shù)據(jù)Request.QueryString形式

把表單各個(gè)元素名字和值形成QueryString里參數(shù)例(classexamples\1-2)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第27頁(yè)Server.Transfer例(classexamples\1-3)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第28頁(yè)HtmlEncode()方法對(duì)給定字符串進(jìn)行HTML編碼,使得瀏覽器不再按照HTML語(yǔ)法對(duì)其進(jìn)行解釋?zhuān)窃瓨虞敵?。比如,?duì)于下面兩條語(yǔ)句:

Response.Write("<h1>中國(guó)人</h1>"+"<br>");Response.Write(Server.HtmlEncode("<h1>中國(guó)人</h1>")+"<br>");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象——所以,假如想將HTML語(yǔ)法中代碼在瀏覽器輸出,就需要使用HtmlEncode()方法。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第29頁(yè)Global.asaxGlobal.asax文件(也稱(chēng)為ASP.NET應(yīng)用程序文件)是一個(gè)可選文件,該文件包含響應(yīng)ASP.NET或HTTP模塊所引發(fā)應(yīng)用程序級(jí)別和會(huì)話級(jí)別事件代碼。Global.asax文件駐留在ASP.NET應(yīng)用程序根目錄中。運(yùn)行時(shí),分析Global.asax并將其編譯到一個(gè)動(dòng)態(tài)生成.NETFramework類(lèi),該類(lèi)是從HttpApplication基類(lèi)派生。配置ASP.NET,方便自動(dòng)拒絕對(duì)Global.asax文件任何直接URL請(qǐng)求;外部用戶(hù)不能下載或查看其中代碼。Global.asax文件是可選。只在希望處理應(yīng)用程序事件或會(huì)話事件時(shí),才應(yīng)創(chuàng)建它。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第30頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第31頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第32頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第33頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第34頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第35頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第36頁(yè)3.3.2Application對(duì)象利用Application對(duì)象存取變量創(chuàng)建Application對(duì)象同時(shí)和互斥Application事件和Global.asax10月10日第37頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第37頁(yè)利用Application對(duì)象存取變量Application對(duì)象能夠存取變量,而且這些變量能夠被多個(gè)用戶(hù)共享。對(duì)Application對(duì)象變量賦值格式為:

Application[變量名]=值引用變量值用Application(變量名)就能夠了。10月10日第38頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第38頁(yè)同時(shí)和互斥在頁(yè)面共享變量時(shí)也引發(fā)一個(gè)問(wèn)題,那就是各個(gè)頁(yè)面都能夠修改共享變量值。為了防止這種沖突出現(xiàn),Application對(duì)象提供了Lock方法處理這么問(wèn)題。其語(yǔ)句以下:

Application.Lock

在這個(gè)語(yǔ)句之后,Application對(duì)象變量值只能由一個(gè)用戶(hù)改動(dòng),這么就防止了多個(gè)用戶(hù)同時(shí)改變一個(gè)變量值情況。當(dāng)用戶(hù)改動(dòng)結(jié)束后,應(yīng)該允許其它用戶(hù)改動(dòng)該變量,這就要求解除對(duì)變量值鎖定。語(yǔ)句以下:

Application.UnLock10月10日第39頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第39頁(yè)Application事件和Global.asaxApplication擁有自己事件和生命周期,當(dāng)Application開(kāi)始開(kāi)啟時(shí),會(huì)觸發(fā)Application_Start事件;當(dāng)Application終止時(shí)或者webconfig被修改保留時(shí),會(huì)觸發(fā)Application_End事件。這兩個(gè)事件代碼都存放在Global.asax文件中。Global.asax文件中主要定義了8個(gè)主要事件:Application_Start、Session_Start、Application_BeginRequest、Application_EndRequest、Application_AuthenticateRequest、Application_Error、Session_End和Application_End。10月10日第40頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第40頁(yè)Session對(duì)象利用Session對(duì)象存取變量Session唯一性和Session終止Session事件10月10日第41頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第41頁(yè)利用Session對(duì)象存取變量與Application對(duì)象一樣,Session對(duì)象也能夠存取變量,但它和Application對(duì)象在存放信息所使用對(duì)象是完全不一樣。Application對(duì)象存放是共享信息,而Session對(duì)象存放信息是局部,它只是針對(duì)某個(gè)特定用戶(hù)。10月10日第42頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第42頁(yè)Session對(duì)象3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象比如,下面兩條語(yǔ)句作用是將字符串“Petter”和“C_sharp”依次添加到Session對(duì)象中:

Session[“username”]=“Petter”;

//Session.Add(“username”,”peter”);Session["userpass"]="C_sharp";這兩個(gè)字符串在Session中“名稱(chēng)”分別為username和userpass,經(jīng)過(guò)它們名稱(chēng)即可訪問(wèn)對(duì)應(yīng)數(shù)據(jù)和對(duì)象。比如,對(duì)于以下語(yǔ)句:

Response.Write(Session["username"]+"<br>");Response.Write(Session["userpass"]+"<br>");執(zhí)行后將輸出:PetterC_sharp當(dāng)然,也能夠經(jīng)過(guò)下標(biāo)來(lái)訪問(wèn)Session對(duì)象中數(shù)據(jù):Response.Write(Session[0]+"<br>");Response.Write(Session[1]+"<br>");語(yǔ)句輸出Session對(duì)象中全部數(shù)據(jù):

for(inti=0;i<Session.Count;i++){Response.Write(Session[i]+"<br>");}ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第43頁(yè)Session事件與Application對(duì)象相同,Session對(duì)象也擁有自己事件。正如在介紹關(guān)于Global.asax文件內(nèi)容時(shí)所見(jiàn)到,Session對(duì)象擁有Start和End事件,他們都存在于文件Global.asax中。當(dāng)一個(gè)Session對(duì)象被創(chuàng)建時(shí),觸發(fā)Session_Start事件;當(dāng)一個(gè)Session對(duì)象被終止時(shí),觸發(fā)Session_End事件。利用這兩個(gè)事件能夠處理一些有用事情,如用戶(hù)信息初始化等等。10月10日第44頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第44頁(yè)Session方法Abandon()方法刪除存放在session對(duì)象中全部會(huì)話變量并釋放它們占用服務(wù)器資源,所以要慎重使用不過(guò)在當(dāng)前頁(yè)中全部腳本命令都處理完后,對(duì)象才會(huì)被真正刪除。在SessionState=“proc”設(shè)置下,會(huì)觸發(fā)Session_End事件Clear()或Remove()方法Session.Clear只是去除Session中全部數(shù)據(jù)并不會(huì)中止該Session,所以也不會(huì)觸發(fā)Session_EndASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第45頁(yè)SessionWeb.config<sessionState>節(jié)定義TimeoutCookielessASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第46頁(yè)4.Session對(duì)象和Application對(duì)象3.3ASP.NET控件和對(duì)象3.3.2ASP.NE慣用對(duì)象共同點(diǎn):都是用于在服務(wù)器端保留數(shù)據(jù)和對(duì)象,它們都是object類(lèi)型數(shù)組,使用方法相同,能夠經(jīng)過(guò)對(duì)象名或下標(biāo)引用其中對(duì)象。通慣用于保留用戶(hù)信息、實(shí)現(xiàn)網(wǎng)站訪問(wèn)計(jì)數(shù)等功效。不一樣點(diǎn):它們作用范圍不一樣,Session對(duì)象作用范圍是一次會(huì)話期內(nèi)),只為一個(gè)用戶(hù)所擁有;Application對(duì)象作用范圍則是Web服務(wù)器一次生存期(從開(kāi)啟服務(wù)器到關(guān)閉服務(wù)器這個(gè)時(shí)間段),可為全部用戶(hù)共享。ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第47頁(yè)Application和Session聯(lián)合使用網(wǎng)站訪問(wèn)計(jì)數(shù)器網(wǎng)站在線人數(shù)(例子aspnet1-4)Global.asaxWebconfig修改<sessionStatemode="InProc"timeout="1"></sessionState>ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第48頁(yè)Application和Session聯(lián)合使用2提升:加入文件處理stringcountfile=Server.MapPath("count.txt");StreamReadersrd;srd=File.OpenText(countfile);intcount=0;while(srd.Peek()!=-1){stringstr=srd.ReadLine();count=int.Parse(str);

}srd.Close();Application["count"]=count;提升:加入文件處理intcount=0;count=(int)Application["count"];stringfile_path=Server.MapPath("count.txt");StreamWritersrw=newStreamWriter(file_path,false);srw.WriteLine(count);srw.Close();ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第49頁(yè)Session特殊應(yīng)用場(chǎng)所用戶(hù)登錄界面,每個(gè)頁(yè)面都要判斷用戶(hù)名是否為空演示無(wú)判斷情況增加一個(gè)公共判斷類(lèi)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第50頁(yè)publicclassvalidatePage:System.Web.UI.Page

{protectedoverridevoidOnInit(EventArgse)

{if(Session["valid"]==null||Session["valid"].ToString().CompareTo(Session.SessionID)!=0)

{Response.Write("error");Response.End();

}

}//protectedoverridevoidOnLoad(EventArgse)

//{//if(Session["valid"]==null||Session["valid"].ToString().CompareTo(Session.SessionID)!=0)

//{//Response.Write("error");//Response.End();

//}

//}

}publicpartialclassrequestform:validatePage

{ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第51頁(yè)注意不要重載OnLoad方法,會(huì)讓子類(lèi)Page_Load事件失效重載OnInit方法ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第52頁(yè)CookieCookie是一個(gè)能夠讓網(wǎng)站服務(wù)器把少許數(shù)據(jù)存放到客戶(hù)端硬盤(pán)或內(nèi)存。而且讀能夠取出來(lái)一個(gè)技術(shù)。Cookie是一段文本信息,在客戶(hù)端存放Cookie是ASP.NET會(huì)話狀態(tài)將請(qǐng)求與會(huì)話關(guān)聯(lián)方法之一。Cookie也能夠直接用于在請(qǐng)求之間保持?jǐn)?shù)據(jù),但數(shù)據(jù)隨即將存放在客戶(hù)端并隨每個(gè)請(qǐng)求一起發(fā)送到服務(wù)器。瀏覽器對(duì)Cookie大小有限制,所以,只有不超出4096字節(jié)才能確保被接收。

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第53頁(yè)Cookie查看ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第54頁(yè)CookieSessionID默認(rèn)是用Cookie來(lái)存放,試一試修改webconfig以下所表示:

<sessionStatemode="InProc"timeout="1"cookieless="true"></sessionState>ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第55頁(yè)創(chuàng)建cookie//方式1:

Response.Cookies["username"].value="mike";

Response.Cookies["username"].Expires=DateTime.MaxValue;

//方式2:

HttpCookieacookie=newHttpCookie(“username");

acookie.Value=“mike";

acookie.Expires=DateTime.MaxValue;//cookie.Expires=System.DateTime.Now.AddDays(1);//設(shè)置過(guò)期時(shí)間1天

Response.Cookies.Add(acookie);

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第56頁(yè)創(chuàng)建cookie-子鍵(多值)//方式1:

Response.Cookies["userinfo1"]["name"].value="mike";

Response.Cookies["userinfo1"][“gender"].value=“m";

Response.Cookies["userinfo1"].Expires=DateTime.MaxValue;

//方式2:

HttpCookiecookie=newHttpCookie("userinfo1");

cookie.Values["name"]="mike";

cookie.Values[“gender"]=“m“;

cookie.Expires=DateTime.Now.AddDays(1);

//設(shè)置過(guò)期時(shí)間1天

Response.Cookies.Add(cookie);

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第57頁(yè)CookieC:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies上面是2個(gè)單值Cookie下面是1個(gè)多值CookieASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第58頁(yè)讀取CookieInternetExplorer將站點(diǎn)Cookie保留在文件名格式為<user>@<domain>.txt文件中,其中<user>是您帳戶(hù)名。注意:在獲取Cookie值之前,應(yīng)該確保該Cookie確實(shí)存在。不然,您將得到一個(gè)異常

If(Request.Cookies["userName"]!=null)

{

stringstr=Request.Cookies("userName").Value;

}

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第59頁(yè)讀取Cookie-子鍵(多值)//多值Cookie讀取

If(Request.Cookies["userInfo1"]!=null)

{

stringname=Request.Cookies["userInfo1"]["name"];

stringlast=Request.Cookies["userInfo1"][“gender"];

}

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第60頁(yè)注意創(chuàng)建依賴(lài)于Reponse對(duì)象讀取依賴(lài)于Request對(duì)象ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第61頁(yè)讀取Cookie集合for(inti=0;i<Request.Cookies.Count;i++){HttpCookiecookie=Request.Cookies[i];Response.Write("name="+cookie.Name+"<br/>");if(cookie.HasKeys)//是否有子鍵

{System.Collections.Specialized.NameValueCollectionNameColl=cookie.Values;for(intj=0;j<NameColl.Count;j++){Response.Write("子鍵名="+NameColl.AllKeys[j]+"<br/>");Response.Write("子鍵值="+NameColl[j]+"<br/>");

}

}else

{Response.Write("value="+cookie.Value+"<br/>");

}}Aspnet1-6/webformreadcookiesASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第62頁(yè)銷(xiāo)毀Cookie沒(méi)有權(quán)限刪除客戶(hù)端文件設(shè)置過(guò)期日期

ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第63頁(yè)ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象第64頁(yè)正確寫(xiě)法

ArrayListcookiesnames=newArrayList();for(inti=0;i<Request.Cookies.Count;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論