ASPNET快速入門_第1頁(yè)
ASPNET快速入門_第2頁(yè)
ASPNET快速入門_第3頁(yè)
ASPNET快速入門_第4頁(yè)
ASPNET快速入門_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、l內(nèi)容: 掌握基于ASP.Net的Web開發(fā),B/S結(jié)構(gòu)原理、ASP.Net內(nèi)部原理、狀 態(tài)管理(Cookie、Session、ViewState等)、數(shù)據(jù)驗(yàn)證、普通 ASP.Net控件、母版、ListView/Repeater等數(shù)據(jù)綁定控件、AJAX 、緩 存、Membership、導(dǎo)航、自定義控件等。 l目標(biāo): 以應(yīng)用為目標(biāo),能夠使用ASP.Net開發(fā)常見的動(dòng)態(tài)網(wǎng)站功能,并且和 Dom、JQuery等客戶端技術(shù)結(jié)合進(jìn)行網(wǎng)站的開發(fā)。 l參考書:ASP.NET 3.5 揭秘 l注意: 原理先行,對(duì)于ASP.Net來說弄明白了原理才能學(xué)得更快。會(huì)講一些原 理性的非常規(guī)用法代碼,用標(biāo)識(shí),不要學(xué)這種

2、寫法。 lJava班先講Servlet再講JSP,.Net也是先講HttpHandler再講 WebForm。 課程安排 l第一階段:原生控件和第一階段:原生控件和.NET內(nèi)部對(duì)象內(nèi)部對(duì)象 1、目標(biāo):從網(wǎng)絡(luò)的角度介紹 ASP.NET 的工作原理,并對(duì) ASP.NET 中的幾個(gè)核心對(duì)象與 HTTP 之間的關(guān)系進(jìn)行分析。掌 握WEB運(yùn)行請(qǐng)求響應(yīng)原理,核心對(duì)象及服務(wù)器頁(yè)面生命周期。 2、項(xiàng)目:GSSMS【綠色簡(jiǎn)單學(xué)生管理-原生版】 l第二階段:服務(wù)器控件提高開發(fā)效率第二階段:服務(wù)器控件提高開發(fā)效率 1、目標(biāo):掌握服務(wù)器端控件的使用及控件生命周期。 2、項(xiàng)目:GSSMS【綠色簡(jiǎn)單學(xué)生管理-服務(wù)器控件版

3、】 l第三階段:第三階段:ASP.NET高級(jí)進(jìn)階高級(jí)進(jìn)階 1、目標(biāo):掌握緩存/Ajax/Json/母板頁(yè)/錯(cuò)誤頁(yè)/網(wǎng)站部署 /CKFinder 我們?cè)趺纯吹骄W(wǎng)站的? 1、在地址欄輸入地址敲回車后瀏覽器到底做了什么事情? 服務(wù)器與瀏覽器語(yǔ)言 1.瀏覽器與服務(wù)器語(yǔ)言 瀏覽器瀏覽器只負(fù)責(zé)解釋執(zhí)行html+css+javascript代碼 服務(wù)器服務(wù)器可執(zhí)行服務(wù)器端語(yǔ)言:.NET,JAVA,.,分別由不同的運(yùn)行運(yùn)行 環(huán)境環(huán)境執(zhí)行代碼(Framework,JVM) 2.靜態(tài)頁(yè)面(html)和動(dòng)態(tài)頁(yè)面(aspx)的區(qū)別? 比如說新聞列表頁(yè)面(郵箱列表)。 瀏覽器: html javascript css

4、服務(wù)器: ?HTML(.html) .Net(.aspx .ashx) JAVA(.jsp) PHP(.php) 編寫代碼演示靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面編寫代碼演示靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面 文件擴(kuò)展名文件擴(kuò)展名說明說明 .ashx.ashx 一般處理程序一般處理程序,ASP.NETASP.NET核心程序,但一般使用核心程序,但一般使用.aspx.aspx .aspx.aspx 常用程序,用于創(chuàng)建網(wǎng)頁(yè)和對(duì)網(wǎng)頁(yè)進(jìn)行編程的核心文件常用程序,用于創(chuàng)建網(wǎng)頁(yè)和對(duì)網(wǎng)頁(yè)進(jìn)行編程的核心文件 類型類型( (前臺(tái)文件前臺(tái)文件) ),和,和.aspx.cs.aspx.cs文件配套使用文件配套使用 .aspx.cs.aspx.cs

5、常用程序,用于編寫大量的常用程序,用于編寫大量的c#c#業(yè)務(wù)代碼,和業(yè)務(wù)代碼,和.aspx.aspx配套配套 使用。使用。 .ascx 指明一個(gè) ASP.NET 用戶定義控件 .asax 包含 ASP.NET 應(yīng)用程序級(jí)事件的事件語(yǔ)法 .config.config 配置文件,用于設(shè)置應(yīng)用程序的各種屬性配置文件,用于設(shè)置應(yīng)用程序的各種屬性 .asmx 供宿主 Web 服務(wù)在本地或遠(yuǎn)程使用 ASP.NET里的常用文件(重點(diǎn)) 下面來編寫一個(gè)登錄的動(dòng)態(tài)頁(yè)面讓各位加深體會(huì)下面來編寫一個(gè)登錄的動(dòng)態(tài)頁(yè)面讓各位加深體會(huì) 登錄流程 l用戶打開登錄頁(yè)面,填入用戶名密碼,點(diǎn)擊【登錄】按鈕,瀏覽器將用 戶輸入的用戶

6、名用戶名、密碼密碼發(fā)送發(fā)送給網(wǎng)站服務(wù)器,網(wǎng)站服務(wù)器讓負(fù)責(zé)處理登錄 請(qǐng)求請(qǐng)求的ASP.Net程序來處理這個(gè)登錄請(qǐng)求,處理程序判斷用戶名、密碼 是否正確,然后將判斷結(jié)果返回返回給瀏覽器。 l開發(fā)一個(gè)登錄頁(yè)面需要做兩個(gè)工作: 1.顯示在瀏覽器中的頁(yè)面、Dom特效,和C#代碼沒關(guān)系,也就是前端( 前臺(tái))頁(yè)面,相當(dāng)于這個(gè)頁(yè)面要生成的HTML代碼模板; 2.處理瀏覽器請(qǐng)求的服務(wù)器端代碼,C#代碼,也就是后臺(tái)代碼。 畫圖區(qū)分第一次請(qǐng)求和之后的提交畫圖區(qū)分第一次請(qǐng)求和之后的提交 什么是ASP.Net lASP.Net是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),在服務(wù)器端運(yùn)行.Net代碼,動(dòng)態(tài)生成 HTML。 l可以使用JavaScr

7、ipt、Dom在瀏覽器端完成很多工作,但是有很多工作 無法在瀏覽器端完成,比如存儲(chǔ)數(shù)據(jù)、訪問數(shù)據(jù)庫(kù)、復(fù)雜的業(yè)務(wù)邏輯運(yùn) 算、安全性要求高的邏輯運(yùn)算等。 l服務(wù)端控件和HTML控件的生成關(guān)系: 在aspx頁(yè)面中可以使用服務(wù)端控件,簡(jiǎn)化開發(fā)。但瀏覽器只認(rèn)html,因 此在包含服務(wù)端控件的頁(yè)面被請(qǐng)求時(shí),頁(yè)面中的服務(wù)器端控件會(huì)組裝成對(duì) 應(yīng)的HTML控件代碼字符串,如:TextBox。 lASP.Net:WebForm、MVC。 l服務(wù)器控件不是新的控件,在瀏覽器端仍然是生成html標(biāo)簽。服務(wù)端控 件雖然好用,但是也有缺點(diǎn),并不是什么地方用服務(wù)器端控件都好,具 體后面講。 Web應(yīng)用程序和網(wǎng)站 lWebA

8、pplication(Web應(yīng)用程序)和WebSite(網(wǎng)站)的區(qū)別, WebSite是為了兼容從ASP轉(zhuǎn)過來的開發(fā)人員的習(xí)慣而存在的, 用起來簡(jiǎn)單,比如不需要?jiǎng)?chuàng)建命名空間、CS代碼修改以后不需 要重啟就能看到變化(無論是WebSite還是WebApplication,修 改aspx都不需要重啟。 WebApplication每次修改以后點(diǎn)擊【生 成解決方案】也能立即看到修改效果),但是不利于工程化開發(fā) ,比如代碼出錯(cuò)不容易發(fā)現(xiàn),代碼不分命名空間。開發(fā)技術(shù)上沒 有任何區(qū)別,只是開發(fā)、調(diào)試習(xí)慣不同而已。 l方便開發(fā)不用每次調(diào)試都設(shè)定起始頁(yè),在項(xiàng)目的選項(xiàng)中設(shè)定【 Web】啟動(dòng)操作當(dāng)前頁(yè)面,這樣當(dāng)前

9、激活的頁(yè)就是起始頁(yè)。 l此次課程知識(shí)使用WebSite; ASP.Net工作概要流程圖 練習(xí) 練習(xí):做一個(gè)加法計(jì)算器 步驟: 1.新建網(wǎng)站 2.添加新建項(xiàng)-Web窗體(Cul.aspx) 3.打開Cul.aspx,進(jìn)入設(shè)計(jì)視圖,從工具欄選擇控件拖入到頁(yè)面 適當(dāng)?shù)奈恢?可以使用適當(dāng)?shù)腍TML代碼布局-Table) 4.雙擊按鈕,生成點(diǎn)擊事件(和WinForm程序生成點(diǎn)擊事件一樣) 5.在按鈕點(diǎn)擊事件中編寫代碼 接下來進(jìn)入核心程序:一般處理程序接下來進(jìn)入核心程序:一般處理程序 第一個(gè)網(wǎng)站-新建網(wǎng)站 第一個(gè)網(wǎng)站 注意: 1. 選擇C# 2. 空網(wǎng)站 3. 文件夾 第一個(gè)網(wǎng)站-添加新項(xiàng) 在網(wǎng)站上點(diǎn)擊右

10、鍵,選擇【添加新項(xiàng)】: 第一個(gè)網(wǎng)站-選擇一般處理程序 第一個(gè)網(wǎng)站-編寫代碼 lFirstShow.ashx(一般處理程序) 第一個(gè)網(wǎng)站-在瀏覽器查看 1.在要查看的文件 上單擊右鍵,選擇 在瀏覽器中查看。 2.注意到屏幕右下 角狀態(tài)欄中出現(xiàn)了 一個(gè)小圖標(biāo): Cassini服務(wù)器服務(wù)器 是是vs內(nèi)置的開發(fā)用內(nèi)置的開發(fā)用 的小型服務(wù)器程序的小型服務(wù)器程序 我們待會(huì)在瀏覽器我們待會(huì)在瀏覽器 看到的頁(yè)面就是由看到的頁(yè)面就是由 它處理并返回的。它處理并返回的。 第一個(gè)網(wǎng)站-訪問結(jié)果 l顯示: 終于降臨到這個(gè)神奇的國(guó)度了! 剛才倆家伙做了什么?(請(qǐng)求響應(yīng)的過程) 用戶在瀏覽器地址欄輸入: http:/lo

11、calhost:80777/FirstShower.ashx 服務(wù)器接收到用戶的請(qǐng)求,發(fā)現(xiàn) 是請(qǐng)求.ashx文件,便將請(qǐng)求交給 framework執(zhí)行,fw找到對(duì)應(yīng)的文 件login.ashx,執(zhí)行后將生成的字 符串(通常是html+css+javascript格 式)返回給瀏覽器。 瀏覽器接收到服務(wù)器返回的數(shù)據(jù), 并按照語(yǔ)法解釋執(zhí)行,以界面的方 式展示給用戶看到。 (3.1此時(shí)如果html等代碼中包含外 部文件,則再次發(fā)送單獨(dú)請(qǐng)求服 務(wù)器相應(yīng)文件數(shù)據(jù)) First.ashx 那如何理解那如何理解B/S結(jié)構(gòu)的原理呢?最好的辦法就是我們自己做一個(gè)服務(wù)器程序結(jié)構(gòu)的原理呢?最好的辦法就是我們自己做一

12、個(gè)服務(wù)器程序 瀏覽器和服務(wù)器到底是什么東東? l如果我們自己來編寫一個(gè)瀏覽器和服務(wù)器程序,該怎么做? l就好像打電話一般 咱們用中文還是用英文?(約定通信的語(yǔ)法) 準(zhǔn)備好要說的話 (按照語(yǔ)法準(zhǔn)備要傳輸給對(duì)方的數(shù)據(jù)) 撥通電話(建立連接) 通過電話機(jī)/電話線說話(通過互聯(lián)網(wǎng)傳輸數(shù)據(jù)) 注意:兩個(gè)人都得拿對(duì)話筒(通信雙方關(guān)注接收對(duì)方的數(shù)據(jù)) l總結(jié): 瀏覽器:一個(gè)可以通過HTTP協(xié)議向服務(wù)器發(fā)送各種請(qǐng)求,并對(duì)從服務(wù)器發(fā) 來的超文本信息和各種多媒體數(shù)據(jù)格式進(jìn)行解釋、顯示和播放 。 服務(wù)器:一個(gè)管理資源并為用戶提供服務(wù)的計(jì)算機(jī)軟件。 交互時(shí)使用HTTP協(xié)議。 只能被瀏覽 器請(qǐng)求嗎? HTTP請(qǐng)求詳解圖

13、 先來結(jié)合剛才的網(wǎng)頁(yè)程序了解一下HTTP請(qǐng)求過程 OurHttpServer-咱自己的服務(wù)器程序 瀏覽器和服務(wù)器本質(zhì)上就是兩個(gè)使用SocketSocket進(jìn)行基于HTTPHTTP協(xié)議協(xié)議的通 信的兩個(gè)應(yīng)用程序應(yīng)用程序(我們使用WinForm)。 咱自己做個(gè)服務(wù)器程序要解決的問題: l-1.怎么接收瀏覽器的請(qǐng)求?接收以后怎么理解? l0.怎么向?yàn)g覽器發(fā)送響應(yīng)?發(fā)送后瀏覽器怎么理解? l1.如何對(duì)靜態(tài)頁(yè)面(html/css/javascript)的請(qǐng)求做出響應(yīng)? l2.如何對(duì)動(dòng)態(tài)頁(yè)面(ashx/aspx)的請(qǐng)求作出響應(yīng)?動(dòng)態(tài)文件可是有 很多的,使用什么方式來調(diào)用呢? l3.如何對(duì)圖片文件(jpg/

14、gif)的請(qǐng)求作出響應(yīng)? l4.如何保存狀態(tài)? OurHttpServer-咱自己的服務(wù)器程序 l解決思路: l1.使用套接字進(jìn)行數(shù)據(jù)交換。 l2.使用HTTP協(xié)議(到底什么是到底什么是HTTP協(xié)議?協(xié)議?)的數(shù)據(jù),雙方按照此 協(xié)議解釋理解接收到的數(shù)據(jù)。 l3.直接讀取靜態(tài)文件的數(shù)據(jù)并通過套接字發(fā)送。 l4.對(duì)于動(dòng)態(tài)文件的請(qǐng)求,可以通過分析請(qǐng)求頁(yè)面,并反射所對(duì)應(yīng) 的類,并通過接口調(diào)用類的方法。 那么,在那么,在ASP.NET中,是怎么解決這些問題的?中,是怎么解決這些問題的? 咱來依次舉個(gè)例子。咱來依次舉個(gè)例子。 大家自己看大家自己看10分鐘。分鐘。 HTTP協(xié)議消息結(jié)構(gòu)圖 瀏覽器 服務(wù)器 請(qǐng)

15、求報(bào)文 響應(yīng)報(bào)文 lFirstShow.ashx ashx? HttpHandler(一般處理程序一般處理程序) 請(qǐng)求上下文對(duì)象請(qǐng)求上下文對(duì)象 (此次請(qǐng)求處理要使用到的信 息和對(duì)象都在里面) 被訪問時(shí)被調(diào)用的處理方法。被訪問時(shí)被調(diào)用的處理方法。是 不是想起:窗體加載事件了: void Form1_Load(object sender, EventArgs e) 服務(wù)器響應(yīng)屬性(調(diào)用HttpResponse對(duì)象) 是否重用(暫時(shí)用不著,不用理) 重要接口重要接口 HttpHandlersHttpHandlers在在AA處理的位置處理的位置( (終點(diǎn)終點(diǎn)) ) 請(qǐng)求管道(由N個(gè)過濾器組成) 把處理

16、過程看成一個(gè)黑盒子把處理過程看成一個(gè)黑盒子 我就知道你們想聽. 一般處理程序(HttpHandler) l一般處理程序(HttpHandler): 是一個(gè)實(shí)現(xiàn)類System.Web.IHttpHandler接口的類。 任何一個(gè)實(shí)現(xiàn)了IHttpHandler接口的類都能作為一個(gè)外部請(qǐng)求的 目標(biāo)程序。 l先演示一下ASPX頁(yè)面。我們可以把一個(gè)HttpHandler看作是一個(gè) 請(qǐng)求的終點(diǎn)。最常見的是ASP.NET頁(yè)面。當(dāng)用戶請(qǐng)求一個(gè).aspx 頁(yè)面時(shí),請(qǐng)求將被頁(yè)面交給頁(yè)面Handler處理。 l咱可以通過創(chuàng)建一個(gè)我們自己的HttpHandler程序來生成瀏覽器 代碼發(fā)送回客戶端瀏覽器。 如何接收和向

17、發(fā)送客戶端數(shù)據(jù)?如何接收和向發(fā)送客戶端數(shù)據(jù)? 服務(wù)器怎么接收和發(fā)送數(shù)據(jù)? 服務(wù)器怎么接收?服務(wù)器怎么接收? 服務(wù)器怎么發(fā)送?服務(wù)器怎么發(fā)送? ASP.NET系統(tǒng)對(duì)象 系統(tǒng)對(duì)象系統(tǒng)對(duì)象ASP.NET Page 指向頁(yè)面自身的方式。作用域?yàn)轫?yè)面執(zhí)行期。 Request 讀取客戶端在Web請(qǐng)求期間發(fā)送的值 Response 封裝了頁(yè)面執(zhí)行期返回到HTTP客戶端的輸出 Application 作用于整個(gè)程序運(yùn)行期的狀態(tài)對(duì)象 Session 會(huì)話期狀態(tài)保持對(duì)象,用于跟蹤單一用戶的會(huì)話。 Cookie 客戶端保持會(huì)話信息的一種方式 Server 提供對(duì)服務(wù)器上的方法和屬性的訪問 在一般處理程序里,通過Pr

18、ocessRequest方法的參數(shù)HttpContext context調(diào)用 一、瀏覽器提交數(shù)據(jù)方式?一、瀏覽器提交數(shù)據(jù)方式?(例) 1.表單:(數(shù)據(jù)藏在請(qǐng)求報(bào)文體中,格式:txtname=james Request(HttpRequest) Response.Write(Hello,China!); End方法方法 結(jié)束輸出結(jié)束輸出 自己動(dòng)手寫動(dòng)態(tài)網(wǎng)站 l入門1.html l新建一個(gè)【一般處理程序】入門1.ashx, ProcessRequest中寫 context.Response.ContentType = text/html; string username = context.Req

19、uestusername; context.Response.Write(username + 你好 +Guid.NewGuid(); l每當(dāng)用戶請(qǐng)求訪問ashx頁(yè)面的時(shí)候,ProcessRequest方法就會(huì)被調(diào)用,在這里通過訪問 context.Request獲得訪問者的請(qǐng)求參數(shù)等。然后在ProcessRequest中通過 context.Response向?yàn)g覽器發(fā)回?cái)?shù)據(jù)給瀏覽器。ProcessRequest結(jié)束之時(shí)就是服務(wù)器為這 個(gè)瀏覽者本次訪問服務(wù)完成之時(shí) l瀏覽器向服務(wù)器端提交數(shù)據(jù),被提交數(shù)據(jù)的表單(input、select、textarea等)放到form中 ,form中通過act

20、ion屬性設(shè)定表單被提交給哪個(gè)頁(yè)面,為了在服務(wù)端取出表單項(xiàng)的值,需要 在HTML中為表單元素設(shè)定name屬性,注意id是給JS操作Dom用的,name才是提交給服務(wù) 器用的。在服務(wù)器端用context.Requestusername來根據(jù)表單項(xiàng)的name來獲得提交的屬 性值。通過context.Response.Write向?yàn)g覽器輸出處理后的顯示HTML內(nèi)容。 注意 l當(dāng)我們點(diǎn)擊【提交】按鈕以后是瀏覽器將用戶填寫的文本框等控件中的值“提取 ”出來發(fā)送給服務(wù)器,而不是服務(wù)器來讀取用戶填寫的這個(gè)頁(yè)面。哪些標(biāo)簽的哪 些值會(huì)被提交給服務(wù)器呢?將用戶填寫的內(nèi)容提交到服務(wù)器有如下幾個(gè)條件: 只能為 inp

21、ut、textarea、select三種類型的標(biāo)簽。只有input(文本框、 CheckBox等)用戶才可能填寫值,、等標(biāo)簽僅供顯示用 ,沒有提交到服務(wù)器的必要。 只有value屬性的值才會(huì)提交給服務(wù)器。以input標(biāo)簽為例,input標(biāo)簽有title、 type、disabled等屬性,但是這些屬性都是供顯示用的,用戶并不能修改, 只有value屬性才是用戶輸入的屬性,因此只有value屬性的值才會(huì)被提交到 服務(wù)器。 標(biāo)簽必須設(shè)定name屬性。學(xué)習(xí)Dom的時(shí)候我們知道如果要通過JavaScript操 作標(biāo)簽,必須為標(biāo)簽設(shè)定Id。如果要將標(biāo)簽的value屬性值提交到服務(wù)器,則 必須為標(biāo)簽設(shè)定n

22、ame屬性,提交到服務(wù)器的時(shí)候?qū)?huì)以“name=value”的鍵 值對(duì)的方式提交給服務(wù)器,多個(gè)鍵值對(duì)之間用 l并沒有真的返回提交頁(yè)面,只是看起來像罷了。 “返回”提交頁(yè)面改進(jìn)版 l為了請(qǐng)求、返回的內(nèi)容一樣,將頁(yè)面源碼放到字符串常量中,模板中有一些待填值的占位符 ,第一次進(jìn)入頁(yè)面的時(shí)候就直接訪問ashx,讀取htm模板,將待填值占位符設(shè)置為空,然后 輸出到瀏覽器。 l為了區(qū)分是第一次直接進(jìn)入頁(yè)面還是點(diǎn)擊提交以后重新進(jìn)入ashx,在form中增加一個(gè)隱藏字 段:,如果能夠從Request中讀取 到ispostback=true就說明是點(diǎn)擊提交以后重新進(jìn)入ashx,否則就是第一次進(jìn)入ashx。 is

23、postback就是一個(gè)標(biāo)志位。 l實(shí)現(xiàn)思路:在ProcessRequest中首先從Request中讀取ispostback,如果讀取到true,說明 是提交進(jìn)入的,就加載模板,并且進(jìn)行占位符用計(jì)算后的值替換,否則就將模板中的占位符 清空直接輸出給瀏覽者。 占位符找一個(gè)特殊的不會(huì)和其他字符串沖突的就行。代碼見備注 l剛進(jìn)入hello2.ashx的時(shí)候是直接向?yàn)g覽器輸出內(nèi)容,用戶在輸出的內(nèi)容中填入數(shù)值,再點(diǎn)擊 提交,服務(wù)器就知道“提交回來了”(PostBack) lHttp是請(qǐng)求、響應(yīng)的模型,服務(wù)器不會(huì)來讀取瀏覽器的網(wǎng)頁(yè),能夠得到的就是客戶端網(wǎng)頁(yè)提 交過來的數(shù)據(jù)。 l如果訪問Hello2.ash

24、x,多次點(diǎn)擊刷新,都是“直接進(jìn)入” l如果提交表單,再多次點(diǎn)擊刷新,都是“提交進(jìn)入” l疑?討論:文本框上次輸入的值在提交表單后又顯示出來并不是理所當(dāng)然的,是開發(fā)人員幫 著讀取提交上來的值然后渲染上去的。這就是ASP.Net中ASPX和CS的關(guān)系。IsPostBack是 依賴于ViewState的,所以禁用了頁(yè)面的ViewState,IsPostBack永遠(yuǎn)為False。演示aspx中 的IsPostBack在刷新、重新輸入地址等情況下的值。 l不是服務(wù)器去讀取模板htm中的內(nèi)容,而是讀取用戶的提交,比如可以直接敲入網(wǎng)址??赡?的錯(cuò)誤:先convert成int,再判斷tostring是否為空。

25、 lIHttpHandler就是一個(gè)很單一的“讀取請(qǐng)求參數(shù)、發(fā)回響應(yīng)給瀏覽器”的處理程序,沒有其他“ 超能力” 表單提交方式:Get與Post l還可以設(shè)定的method屬性指定表單提交方式,get(默認(rèn)值)是通過 URL傳遞表單值,post傳遞的表單值是隱藏到http報(bào)文中,url中看到不。 lget和post的區(qū)別(???:get是通過url傳遞表單值,post通過url看不到表單 域的值;get傳遞的數(shù)據(jù)量是有限的,如果要傳遞大數(shù)據(jù)量不能用get,比如 type=“file”上傳文章、type=“password”傳遞密碼或者發(fā)表大段文 章,post則沒有這個(gè)限制;post會(huì)有瀏覽器提示

26、重新提交表單的問題,get則 沒有(加分的回答)。對(duì)于Post的表單重新敲地址欄再刷新就不會(huì)提示重新提 交了,因?yàn)橹匦虑玫刂肪蜎]有偷偷提交的數(shù)據(jù)了。Post方式的正確的地址很 難直接發(fā)給別人。 lGet方式URL數(shù)據(jù)格式。服務(wù)端文件名后跟著“?”,由于客戶端可能向服務(wù) 器端提交多個(gè)鍵值對(duì),鍵值對(duì)之間用“ Response.AddHeader(“Content-Disposition”, string.Format(“attachment;filename=”0“”, encodeFileName); l其中filename后為編碼后的文件名。filename段為建議的保存文 件名。 l練習(xí):使

27、用Handler為學(xué)員列表添加“下載學(xué)員附件”功能 ASP.NET第一階段的第一部分結(jié)束 ASP.NET第一部分主要內(nèi)容:第一部分主要內(nèi)容: 主要內(nèi)容: 1.瀏覽器/服務(wù)器交互原理(請(qǐng)求/響應(yīng)的過程)。 2.瀏覽器-服務(wù)器-IIS-FrameWork(aspnet_isapi.dll)-IHttpHandler 的處理流程。 3.Web網(wǎng)站和Web應(yīng)用程序的區(qū)別(開始時(shí)和發(fā)布后) 4.【一般處理程序】的使用(增刪改查)和上傳文件/動(dòng)態(tài)輸出文件數(shù)據(jù) 5.上下文對(duì)象(HttpContext)的 重要屬性: Response(負(fù)責(zé)向客戶端輸出),Request(包含所有客戶端提交的數(shù)據(jù)) 注意:不要

28、老想著晚上熬夜學(xué)習(xí),因?yàn)榇蟛糠秩藭?huì)有產(chǎn)生一種消極的時(shí)間心里暗示“玩一 會(huì)兒吧,反正晚上有時(shí)間。” 養(yǎng)成健康的生活習(xí)慣,逼自己在20:30前把代碼方面的工作做完,提高效率。 HttpHandler實(shí)現(xiàn)文件下載 l如果HttpHandler輸出的是html、txt、jpeg等類型的信息,那么瀏覽器會(huì)直接顯 示,如果希望彈出保存對(duì)話框,則需要添加Header:string encodeFileName = HttpUtility.UrlEncode(“過濾詞.txt”); Response.AddHeader(“Content- Disposition”, string.Format(“attach

29、ment;filename=”0“”, encodeFileName);其中filename后為編碼后的文件名。filename段為建議的保 存文件名。http報(bào)文中普通方法看不到的那些東西就是“報(bào)文頭(Header)” l練習(xí):從數(shù)據(jù)庫(kù)用戶表導(dǎo)出數(shù)據(jù)到txt文件,讓用戶下載。 l練習(xí):用戶表增加一個(gè)級(jí)別字段。只有登錄用戶才能下載images下的圖片文件( Session中標(biāo)識(shí)是否登錄),如果用戶沒有登錄則首先重定向到登錄界面讓用戶 登錄,用戶登錄成功則跳轉(zhuǎn)到下載列表頁(yè)面,下載鏈接固定寫好即可。如果登錄 用戶是普通用戶則在圖片左上角加上“免費(fèi)用戶試用”的字樣?!鞍踩顺觥?。 畫頁(yè)面流程。 l常

30、見問題:e.preventDefault;或者沒寫造成span閃的原因?不會(huì)保留上次設(shè)置 的靜態(tài)值。講用靜態(tài)頁(yè)面只是講原理,實(shí)際用大部分還是aspx。Single是怎么回 事? l練習(xí):給上面的程序加上登錄驗(yàn)證碼。 ltodo:ShowMsg頁(yè)面3秒自動(dòng)跳轉(zhuǎn);用戶不能直接訪問privateimages下的圖片; 如果程序源代碼開放以后造成的程序的漏洞。 HttpHandler實(shí)現(xiàn)文件下載2 l1、新增需求: 增加一個(gè)ShowMsg.aspx頁(yè)面,接受Msg、Url兩個(gè)參數(shù),分別是顯示的消息和“點(diǎn) 擊繼續(xù)”的鏈接地址。 l2、登錄以后將登錄的用戶Id存入Session。 l3、在看圖片頁(yè)面的Pa

31、geLoad總判斷Session是否有登錄用戶Id,如果沒有的話則 重定向到ShowMsg.aspx頁(yè)面,要求用戶登錄。 Session只有和服務(wù)器長(zhǎng)期不交互才會(huì)銷毀。 todo:ShowMsg頁(yè)面3秒自動(dòng)跳轉(zhuǎn);給上面的程序加上登錄驗(yàn)證碼。 用戶不能直接訪問privateimages下的圖片;如果程序源代碼開放以后造成的程 序的漏洞。 怎么不能在alert后Redirect?怎么樣才能在alert以后重定向? 服務(wù)端控件也可以用Request“TextBox1”方式取值,雖然沒必要 WebForm1 l如果每次輸出網(wǎng)頁(yè)都直接用HttpHandler的話太痛苦了,所以一 般生成html的時(shí)候都直

32、接創(chuàng)建aspx(Web窗體,WebForm)。 lWebForm分為兩個(gè)文件aspx和aspx.cs,aspx是頁(yè)面模板,是頁(yè) 面描述文件,就是html的內(nèi)容,和aspx結(jié)合的更好,不用像一開 始那樣程序員自己去填充模板,控件都是定義在aspx中,內(nèi)聯(lián)的 JavaScript、CSS也是寫在aspx中的,服務(wù)端的C#代碼是定義在 aspx.cs中。aspx控件頁(yè)面長(zhǎng)相,cs控制程序邏輯,這種“前 aspx后cs”的方式就被稱為CodeBehind。aspx就是模板引擎,不 需要再去尋找第三方的模板引擎。 l瀏覽器如果報(bào)錯(cuò)“*行錯(cuò)誤”,不要看aspx,要看生成的源代 碼,記事本如何定位行號(hào),【轉(zhuǎn)

33、到】 WebForm2 lcs可以調(diào)用aspx中的控件,aspx中也可以訪問cs中定義的字段、 函數(shù),還可以編寫復(fù)雜的C#代碼, for等所有C#代碼都可以寫在 aspx中(不推薦) l前面 后面 l在當(dāng)前位置輸出表達(dá)式的值的時(shí)候使用,不 要丟了=,相當(dāng)于在當(dāng)前位置調(diào)用Response.Write(UserName) l使用的函數(shù)、代碼相當(dāng)于在這個(gè)位置調(diào)用函數(shù)、執(zhí)行代碼。注意 aspx中調(diào)用cs的成員級(jí)別必須是protected或者public,不能是 private的。 l中的代碼是運(yùn)行在服務(wù)器端的,是C#語(yǔ)法,在服務(wù)端運(yùn)行 完成才輸出到瀏覽器,其他部分是運(yùn)行在瀏覽器端的,是html、 Ja

34、vaScript語(yǔ)法。 HttpHandler的無狀態(tài) l一個(gè)瀏覽者發(fā)出的請(qǐng)求都是由實(shí)現(xiàn)了IHttpHandler接口的對(duì)象進(jìn)行響應(yīng),由于下次訪 問不一定還是上次那個(gè)對(duì)象進(jìn)行響應(yīng),上次響應(yīng)完畢對(duì)象可能已經(jīng)被銷毀了,寫的類 變量值早就不存在了,因此不要將狀態(tài)信息保存到類變量中。 l編寫一個(gè)ashx private int i; public void ProcessRequest(HttpContext context) context.Response.ContentType = text/plain; context.Response.Write(i+); l多次刷新我們發(fā)現(xiàn),變量根本不會(huì)記

35、憶上次的值。 l如果每次響應(yīng)都創(chuàng)建一個(gè)對(duì)象的話會(huì)非常消耗資源,因此服務(wù)器可能會(huì)對(duì)于多個(gè)請(qǐng)求 重用一個(gè)對(duì)象,這樣如果實(shí)現(xiàn)IHttpHandler的IsReusable方法返回true,那么就表示 這個(gè)HttpHandler允許對(duì)象重用。一般返回true就可以。 投票頁(yè)面 l實(shí)現(xiàn)一個(gè)投票頁(yè)面,頁(yè)面中有“贊成”、“反對(duì)”兩個(gè)按鈕,點(diǎn) 擊“贊成”按鈕則增加贊成數(shù),并且在“贊成”按鈕上顯示最新 的贊成個(gè)數(shù),“反對(duì)”按鈕同樣如此。(*)同一個(gè)IP在24小時(shí) 之內(nèi)只能投票一次。討論方案。 aspx、cs、dll之間的關(guān)系(*) l聊、考CodeBehind的時(shí)候可以順帶吹的點(diǎn)。 l在WebForm的頁(yè)面中執(zhí)

36、行下面的代碼 Response.Write(this.GetType() + ); Response.Write(this.GetType().Assembly.Location + ); Response.Write(this.GetType().BaseType + ); Response.Write(this.GetType().BaseType.Assembly.Location + ); l發(fā)現(xiàn)當(dāng)前執(zhí)行頁(yè)面的類名是ASP.webform1_aspx這樣的類名,父類才是 ASPNETTest1.WebForm1 l使用Reflector打開這個(gè)臨時(shí)dll,反編譯這兩個(gè)類,發(fā)現(xiàn)ASPNE

37、TTest1.WebForm1 是在VS中編寫的aspx.cs類,而ASP.webform1_aspx則是一個(gè)繼承自 ASPNETTest1.WebForm1的子類,ASP.webform1_aspx代碼是根據(jù)aspx內(nèi)容動(dòng)態(tài)生 成的構(gòu)建網(wǎng)頁(yè)內(nèi)容的類。綜上,aspx最終也會(huì)生成一個(gè)類,這個(gè)類是繼承自 aspx.cs中的類。查看反編譯以后的代碼,可以看到就是編譯生成了普通的.Net 代碼。因?yàn)閍spx生成的代碼是cs類的子類,所以就明白了為什么“aspx中調(diào)用cs 的成員級(jí)別必須是protected或者public,不能是private的?!?Page類成員 l1、Request、Respons

38、e、Server、 Session屬性:對(duì)context.Request、 context.Response、context.Server的簡(jiǎn)化調(diào)用。 l2、AppRelativeVirtualPath屬性:獲得頁(yè)面相對(duì)于應(yīng)用根路徑的路徑,比如 /Default2.aspx l3、FindControl(ctrlId),根據(jù)控件的id找到(服務(wù)器端)控件,類似于 getElementById。一般情況下直接在代碼中寫控件id引用控件就可以了,但是對(duì) 于有些場(chǎng)合:使用ListView等控件的模板、編寫自定義控件等則需要使用 FindControl來引用控件,F(xiàn)indControl返回值是Cont

39、rol(大部分控件的父類), 一般需要顯式轉(zhuǎn)換為相應(yīng)的控件:TextBox txtBox = (TextBox)FindControl(TextBox1);txtBox.Text = aaa; l4、IsPostBack:看是True還是False就看瀏覽器是否提交了表單數(shù)據(jù)。 l5、ResolveClientUrl(url)將虛擬路徑轉(zhuǎn)換為客戶端訪問時(shí)的路徑,比如 ResolveClientUrl(/a/b.aspx)結(jié)果是a/b.aspx,這通常在ListView等控件的模板 中輸出HTML使用?;揪褪菍?duì)VirtualPathUtitlity.ToAbsolute簡(jiǎn)化調(diào)用??紤]當(dāng) 前頁(yè)面的相對(duì)路徑,生成的路徑短。最常用。a href=干凈! l6、ResolveUrl(ur

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論