自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET生成客戶端腳本

開發(fā) 后端
這里介紹ASP.NET生成客戶端腳本,ASP.NET通過控件與用戶完成交互,但就客戶端瀏覽器而言,它從未聽過,也不和控件打交道,它所熟悉的是HTML標(biāo)簽和客戶端腳本程序。

ASP.NET生成客戶端腳本

自Google發(fā)布除英文外的唯一名稱——谷歌以來,中國用戶一片嘩然,暫且不論這個(gè)谷歌是不是比胡弋更合適,但Google想借此闡述產(chǎn)品內(nèi)涵,取悅中國用戶之心路人皆知;今年Web 2.0引無數(shù)風(fēng)投競折腰,40億美金撒向大陸都是錢,于是網(wǎng)站們?nèi)缤▌∽兡槪瑩u身一變,換成一張張博客、書簽、圈圈的面龐。冷靜思考,在信息過剩,特別是同質(zhì)化嚴(yán)重的前提下,數(shù)據(jù)挖掘、用戶體驗(yàn)成為網(wǎng)站關(guān)鍵,有人戲稱三分長相(內(nèi)容),七分打扮(內(nèi)容聚集和用戶體驗(yàn))。即是如此,人機(jī)交互設(shè)計(jì)從可有可無提升到必不可少、Ajax技術(shù)變火也就不奇怪了。

服務(wù)器端處理總是Web應(yīng)用系統(tǒng)的核心功能,大多數(shù)的信息處理在服務(wù)器端完成。但如果把所有功能都放在服務(wù)器端,讓頁面帶著幾百幾千字節(jié)的 ViewState在網(wǎng)絡(luò)中來回穿梭,那可不是惡心,那是相當(dāng)?shù)膼盒?。所以我們需要客戶端充?dāng)服務(wù)器端的代言人,通過執(zhí)行腳本程序來分擔(dān)一些系統(tǒng)功能,讓用戶更爽,讓服務(wù)器更輕松。

ASP.NET通過控件與用戶完成交互,但就客戶端瀏覽器而言,它從未聽過,也不和控件打交道,它所熟悉的是HTML標(biāo)簽和客戶端腳本程序。要讓客戶端充當(dāng)服務(wù)器端的代言人,就必須讓二者交流與溝通,即:添加客戶端行為、ASP.NET生成客戶端腳本、控件行為與客戶端行為映射等。

attribute和property是一對有趣的近義詞,MSDN中有這么一句話:“在 ASP.NET 服務(wù)器控件的標(biāo)記中,可以使用屬性 (attribute) 來設(shè)置屬性 (property) 值?!睂傩栽O(shè)置屬性?頭暈?zāi)垦V?。簡單地理解,property是類的成員,attribute是類的外觀。前者是品牌自身特征,后者為代言人特征,前者可以通過后者來展示自己。反映到控件與對應(yīng)HTML標(biāo)簽,控件狀態(tài)是property,標(biāo)簽中對應(yīng)的字符串是attribute,即瀏覽器所看到的服務(wù)器端控件的外形。

宣布:添加客戶端行腳本

HTTP響應(yīng)流就是一串字符流,頁面生成一個(gè)HtmlTextWriter實(shí)例,專門收集控件們生成的HTML標(biāo)記文本,它按控件樹的次序,讓控件的RenderControl方法檢查自己的Visible屬性,如果為真就調(diào)用控件的Render方法向?qū)嵗砑訕?biāo)記文本,搞定后調(diào)用RenderChildren方法向下遞歸傳遞。所以在頁面調(diào)用控件Render方法之時(shí)或之前,可以在動(dòng)態(tài)地修改標(biāo)簽中的Attribute以組裝成相應(yīng)的標(biāo)記文本。

向控件添加客戶端行為,最簡單的方法是在.apsx文件中的標(biāo)簽直接聲明對應(yīng)的Attribute,或以編程方式調(diào)用控件Attributes 集合的Add方法,即向客戶端瀏覽器宣布:我的代言人是老徐~~

  1. <scriptrunatscriptrunat="server"> 
  2. protectedvoidPage_Load(objectsender,EventArgse){  
  3. //為btnTest控件添加onmouseover和onmouseout客戶端行為  
  4. btnTest.Attributes.Add("onmouseover","MakeRed();");  
  5. btnTest.Attributes.Add("onmouseout","RestoreColor();");  
  6. }  
  7. script><html><headrunatheadrunat="server">
  8. <scriptlanguagescriptlanguage="javascript"> 
  9. varpreviousColor;  
  10. //改變前景色  
  11. functionMakeRed(){  
  12. previousColor=window.event.srcElement.style.color;  
  13. window.event.srcElement.style.color="#FF0000";  
  14. }  
  15. //恢復(fù)原前景色  
  16. functionRestoreColor(){  
  17. window.event.srcElement.style.color=previousColor;  
  18. }  
  19. script>head><body><formidformid="form1"runat="server"> 
  20. <asp:buttonidasp:buttonid="btnTest"text=”btnTest”runat="server"/>form>body>html> 

注入:動(dòng)態(tài)添加客戶端腳本

除了直接在.aspx文件中顯式聲明外,Page類還提供了一些方法用于動(dòng)態(tài)創(chuàng)建客戶端腳本。所謂的動(dòng)態(tài)ASP.NET生成腳本,實(shí)際上就是生成對應(yīng)的腳本字符串,然后使用Page類提供的RegisterClientScriptBlock 、RegisterOnSubmitStatement等方法注入到HtmlTextWriter實(shí)例中合適的位置,同時(shí),ASP.NET還提供若干方法用于輔助生成腳本,無非就是加點(diǎn)隱藏輸入域、數(shù)組之類的東西。

控件也可以在OnPreRender方法調(diào)用這些方法通知頁面添加所需腳本字符串。之所以不在Render方法中實(shí)現(xiàn),是因?yàn)镠tmlTextWriter實(shí)例在被傳遞到控件手上時(shí),Page類已經(jīng)完成在HtmlTextWrite實(shí)例中生成對應(yīng)文本,慢了一步。下例為頁面回發(fā)添加一個(gè)確定對話框。

  1. <scriptrunatscriptrunat="server"> 
  2. protectedvoidPage_Load(Objectsender,EventArgse){  
  3. StringscriptText="returnconfirm('要提交嗎?')";  
  4. //添加頁面提交時(shí)執(zhí)行的腳本。  
  5. RegisterOnSubmitStatement("ConfirmSubmit",scriptText);  
  6. }script><html><head>head><body><formidformid="form1"runat="server"> 
  7. <asp:buttonidasp:buttonid=btnTesttext=PostBackrunat="server"/>form>body>html> 

攜手:GetPostBackEventReference方法

很多時(shí)候我們希望客戶端行為能夠和相應(yīng)的服務(wù)端行為攜起手來,共同完成一個(gè)完整的系統(tǒng)功能,讓客戶端行為能夠觸發(fā)相應(yīng)的服務(wù)器端行為,即兩者映射。在 ASP.NET1.1中,本質(zhì)上是把頁面為原子回發(fā)單位,客戶端行為只能在頁面回發(fā)之前向隱藏標(biāo)志域里寫入帶有自身特征的數(shù)據(jù),頁面回發(fā)后,控件們通過檢查隱藏標(biāo)志域的數(shù)據(jù)來觸發(fā)相應(yīng)的行為。

客戶端與服務(wù)端攜手典型例子有兩個(gè):一是GetPostBackEventReference方法,它可以引發(fā)帶有特征數(shù)據(jù)的頁面回傳;一是大名鼎鼎的驗(yàn)證器構(gòu)架,除此之外,標(biāo)準(zhǔn)控件也有若干是通過客戶端行為來實(shí)現(xiàn)。下面我們以前者為例,演示完整的“ASP.NET生成-客戶端處理-回發(fā)-服務(wù)端處理”過程。

  1. publicclassMyControl:Control,IPostBackEventHandler{  
  2. //定義Number屬性  
  3. publicintNumber{  
  4. get{  
  5. if(ViewState["Number"]!=null)  
  6. return(int)ViewState["Number"];  
  7. else  
  8. return50;  
  9. }  
  10. set{  
  11. ViewState["Number"]=value;  
  12. }  
  13. }  
  14. //依賴于用戶操作的事件處理  
  15. //eventArgument為事件數(shù)據(jù),這里由GetPostBackEventReference設(shè)置  
  16. //事件數(shù)據(jù)直接引起該控件狀態(tài)的變化  
  17. publicvoidRaisePostBackEvent(stringeventArgument){  
  18. if(eventArgument=="inc")Number++;  
  19. if(eventArgument=="dec")Number--;  
  20. }  
  21. //生成控件對應(yīng)的HTML標(biāo)記文本  
  22. //除生成Number屬性文本外,還生成兩個(gè)引發(fā)回發(fā)并帶著回發(fā)事件參數(shù)的超鏈接  
  23. //GetPostBackEventReference方法發(fā)出啟動(dòng)回發(fā)的客戶端腳本,并提供引用  
  24. protectedoverridevoidRender(HtmlTextWriterwriter){  
  25. writer.Write("控件值:"+Number.ToString()+"");  
  26. writer.Write(""javascript:"+  
  27. Page.GetPostBackEventReference(this,"inc")+"\">+");  
  28. writer.Write("or");  
  29. writer.Write(""javascript:"+  
  30. Page.GetPostBackEventReference(this,"dec")+"\">-");}}  

由于ASP.NET1.1是以頁面為原子回發(fā)單位,代言人與品牌之間的溝通和聯(lián)系要付出巨大的性能代價(jià)。要改善只能打破以頁面作為原子回發(fā)單位的制度。以上介紹ASP.NET生成客戶端腳本。

【編輯推薦】

  1. ASP.NET控件學(xué)習(xí)總結(jié)
  2. 再談ASP.NET緩存機(jī)制:開發(fā)效率與優(yōu)化的平衡
  3. ASP.NET前臺控件點(diǎn)評:避免強(qiáng)迫癥,奔向簡潔高效
  4. ASP.NET報(bào)表打印的實(shí)現(xiàn):分頁計(jì)算方式
  5. 點(diǎn)評一下ASP.NET的WEB控件
責(zé)任編輯:Barry 來源: 博客園
相關(guān)推薦

2009-07-24 17:31:56

ASP.NET AJA

2021-08-28 05:02:22

Asp安全防護(hù)

2009-08-07 13:56:46

ASP.NET控件開發(fā)

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-27 12:56:27

控件CheckBoxLASP.NET服務(wù)器

2009-07-22 17:45:35

ASP.NET教程

2009-07-31 09:00:44

ASP.NET生成隨機(jī)

2009-07-24 10:41:00

ASP.NET Ses

2009-08-04 11:29:14

HTML代碼ASP.NET控件

2009-07-21 14:16:02

ASP.NET管道優(yōu)化

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-22 17:13:21

Asp.Net編程

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計(jì)

2009-07-29 17:11:25

ASP.NET ISA

2009-07-23 10:06:29

2009-07-29 09:38:06

Web開發(fā)ASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-05 17:43:48

ASP.NET 2.0

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號