偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ASP.NET生成客戶端腳本

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

ASP.NET生成客戶端腳本

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

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

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

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

宣布:添加客戶端行腳本

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

向控件添加客戶端行為,最簡單的方法是在.apsx文件中的標簽直接聲明對應的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. //恢復原前景色  
  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> 

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

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

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

  1. <scriptrunatscriptrunat="server"> 
  2. protectedvoidPage_Load(Objectsender,EventArgse){  
  3. StringscriptText="returnconfirm('要提交嗎?')";  
  4. //添加頁面提交時執(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方法

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

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

  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設置  
  16. //事件數(shù)據(jù)直接引起該控件狀態(tài)的變化  
  17. publicvoidRaisePostBackEvent(stringeventArgument){  
  18. if(eventArgument=="inc")Number++;  
  19. if(eventArgument=="dec")Number--;  
  20. }  
  21. //生成控件對應的HTML標記文本  
  22. //除生成Number屬性文本外,還生成兩個引發(fā)回發(fā)并帶著回發(fā)事件參數(shù)的超鏈接  
  23. //GetPostBackEventReference方法發(fā)出啟動回發(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)系要付出巨大的性能代價。要改善只能打破以頁面作為原子回發(fā)單位的制度。以上介紹ASP.NET生成客戶端腳本。

【編輯推薦】

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

2009-07-24 17:31:56

ASP.NET AJA

2009-08-07 13:56:46

ASP.NET控件開發(fā)

2021-08-28 05:02:22

Asp安全防護

2009-07-27 12:56:27

控件CheckBoxLASP.NET服務器

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

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-22 17:13:21

Asp.Net編程

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-31 09:00:44

ASP.NET生成隨機

2009-07-29 09:38:06

Web開發(fā)ASP.NET

2009-07-23 10:06:29

2009-07-29 17:11:25

ASP.NET ISA

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-05 17:43:48

ASP.NET 2.0

2009-08-03 13:38:18

ASP.NET編程模型
點贊
收藏

51CTO技術棧公眾號