【文章內(nèi)容簡(jiǎn)介】
頁(yè)寫程序編寫。 它是 頁(yè)面的默認(rèn)語(yǔ)言。雖然你在這一本書中一直用 Visual Basic, 但是,你也需要了解用其它的支持公共語(yǔ)言庫(kù)的語(yǔ)言創(chuàng)建 。除此之外,這包括 C, C++ 。 提示 : 本 書所含的光碟包含 C 源代碼。 除微軟之外的公司產(chǎn)生的幾十 個(gè)其他的語(yǔ)言已經(jīng)能夠和 .NET framework兼容 。 這些其他的語(yǔ)言的一些例子包括 Python、 SmallTalk 、 Eiffel和 COBOL。這就意味著假如你真的想 , 你可以使用 COBOL 寫 頁(yè)面。 不管你使用什么語(yǔ)言開發(fā) 頁(yè)面,你需要明白 ,這就意味著 。 你第一次請(qǐng)求 頁(yè)面 , 頁(yè)面被編譯成一個(gè) .NET類 , 這個(gè)類文件被保存在一 個(gè)特殊的目錄下這個(gè)目錄的名字叫 Temporary Files。對(duì)于一個(gè) 信類文件出現(xiàn)在 Temporary Files目錄下。以后不管任何時(shí)候你請(qǐng)求那個(gè)同樣的,那個(gè)通信類文件就會(huì)執(zhí)行。 當(dāng) 頁(yè)面被編譯的時(shí)候,它沒(méi)被直接地被編譯成機(jī)器碼而是被編譯成了一個(gè)中間語(yǔ)言,名字叫 (MSIL)所有 .NET可用的語(yǔ)言都被編譯成這種中間語(yǔ)言。 一個(gè) 頁(yè)面不會(huì)被編譯成本地機(jī)器碼直到它被一個(gè)瀏覽器訪問(wèn),在那個(gè)時(shí)間點(diǎn)包含在 Temporary Files目錄下的類文件用 JIT編譯器編譯并且執(zhí)行。 這些迷惑的方面體現(xiàn)在整 個(gè)過(guò)程都在后臺(tái)運(yùn)行,你必須要做的是用資源代碼為你的。 .NET framework 為你處理完轉(zhuǎn)換它為編譯碼這一困難工作。 典型 ASP提示 : VBScript 怎么樣呢 ? 在 之前, VBScript 是開發(fā)動(dòng)態(tài)頁(yè)面最流行的語(yǔ)言。 不支持 VBScript ,而且這是好消息。 Visual Basic 是一個(gè) VBScript 的超集 ,意味著 Visual Basic 相對(duì)于 VBScript有更多的功能。 因此 , 你用 Visual Basic 有更豐富的函數(shù)和語(yǔ)句供你使用。 此外,不像 VBScript , Visual Basic 是一種被編譯的語(yǔ)言。 這意味著如果你使用 Visual Basic 重寫相同的 VBScript代碼感覺(jué)會(huì)更容易一些。 假如你過(guò)去只用 VBScript而不用 Visual Basic,也不用擔(dān)心。 因?yàn)? VBScript 如此接近 Visual Basic, 你將會(huì)發(fā)現(xiàn)在這二種語(yǔ)言之間的轉(zhuǎn)變是很容易的。 提示 : 在 .NET framework中, 微軟包括一個(gè)名叫 IL Disassembler的有趣的工具。在臨時(shí)的 類的代碼。 它列出了類的所有方法和屬性使你能夠?yàn)g覽中間代碼。 正如在這章討論的這個(gè)工具也可以用于操作 。 舉例來(lái)說(shuō),你能使用 IL Disassembler 瀏覽 TextBox 控件的中間代碼。 (位于在一個(gè)叫做 的文件中 ) 介紹 控件 控件為你的 Web應(yīng)用程 序提供動(dòng)態(tài)和交互的用戶接口。這些控件能夠使你的網(wǎng)站的使用者看見和交互。 舉例來(lái)說(shuō),你能使用控件建立 HTML 窗體元素,交互式日歷 , 而且可以滾動(dòng)標(biāo)題廣告。 控件和 HTML 內(nèi)容共存。 典型地,你用通常的 HTML 創(chuàng)建你的網(wǎng)頁(yè)的靜態(tài)區(qū)域和用 控件創(chuàng)建網(wǎng)頁(yè)的動(dòng)態(tài)區(qū)域。 了解 控件是怎么工作的?最好的方法是看一個(gè)簡(jiǎn)單的 Web應(yīng)用窗體頁(yè)面。 添加 第二個(gè)難點(diǎn)就是 ,他是確切的頁(yè)面的程序代碼 ,在你添加的程序用戶處理控件 也頁(yè)面事件。 如果一個(gè)使用者單擊 HTML窗體中的 Button按鈕, 舉例來(lái)說(shuō),那個(gè)按鈕就會(huì)響應(yīng)一個(gè)事件 (單擊事件 ) 。 典型地,你想添加代碼響應(yīng)這個(gè)事件到頁(yè)面中。 舉例來(lái)說(shuō),當(dāng)某人單擊 Button按鈕控件的時(shí)候,你可以保存窗體數(shù)據(jù)到一個(gè)文件或者數(shù)據(jù)庫(kù)。 控件不是唯一的能相應(yīng)事件的事物。 當(dāng)它被請(qǐng)求的時(shí)候一個(gè) 頁(yè)面每次都能夠響應(yīng)幾個(gè)事件。 舉例來(lái)說(shuō),每當(dāng)你請(qǐng)求一個(gè)頁(yè)面,頁(yè)面的初始化事件就會(huì)被觸發(fā)。 每當(dāng)初始化事件發(fā)生的時(shí)候,你能夠添加代碼到頁(yè)面中來(lái)執(zhí)行。 2. 用 Web服務(wù)器控件創(chuàng)建窗體 構(gòu) 建靈活窗體 你用幾個(gè)基本 Web控件來(lái)代替標(biāo)準(zhǔn)的 HTML 窗體元素,例如 radio buttons、 text boxes, and list boxes. 你能夠用這些控件為你的 Web應(yīng)用程序在你的 面。 下面的部分為這些 Web控件提供了詳細(xì)的提綱和程序源代碼。 控制頁(yè)面瀏覽 在下列的部分中,你學(xué)會(huì)如何控制一個(gè)用戶從一個(gè) 。首先,你學(xué)會(huì)怎么把一個(gè) HTML窗體鏈接到另一個(gè)頁(yè)面來(lái)獲取信息。 下一步,你學(xué)會(huì)用Redirect()方法自動(dòng)讓一個(gè)用戶瀏覽一個(gè)新 的頁(yè)面 。 最后,你學(xué)會(huì)用超級(jí)鏈接控件怎么把頁(yè)面連在一起。 對(duì)控件應(yīng)用格式 在下列的部分中,你學(xué)會(huì)該如何創(chuàng)建更有吸引力的 Web窗體。 首先,你瀏覽一下針對(duì)所有 Web控件格式屬性他們是基本控件類的格式屬性。 然后,你學(xué)會(huì)在 Web控件上應(yīng)用樣式表風(fēng)格。 3. 用驗(yàn)證控件做頁(yè)面驗(yàn)證 使用客戶端驗(yàn)證 傳統(tǒng)地,當(dāng)增加驗(yàn)證到他們的頁(yè)面中時(shí),他們會(huì)面臨一個(gè)嚴(yán)峻的選擇。 你可以添加窗體頁(yè)面驗(yàn)證規(guī)則到你的服務(wù)器端代碼,或者是添加驗(yàn)證規(guī)則到你的客戶端代碼。 寫驗(yàn)證代碼到客戶端代碼中的優(yōu)勢(shì)能夠及時(shí)反饋到你的用戶。 舉例來(lái)說(shuō),一個(gè) 使用者忽略在一個(gè)要求檢驗(yàn)的字段中輸入一個(gè)值,你能夠及時(shí)的顯示一個(gè)錯(cuò)誤信息而不需要返回到服務(wù)器端解決。 人們喜歡客戶端的驗(yàn)證。 它看起來(lái)很棒而且產(chǎn)生一種比較好的效果。 然而,問(wèn)題是它不與所有的瀏覽器兼容。 不是所有的瀏覽器支持 JavaScript、不同版本的瀏覽器的不同版本支持 JavaScript,所以客戶端驗(yàn)證沒(méi)有保障。 由于這個(gè)原因,許多開發(fā)者在過(guò)去決定添加自定義驗(yàn)證到服務(wù)器端。因?yàn)榉?wù)器端代碼能夠和任何瀏覽器協(xié)同工作。就這樣的做法更有安全的保障。 幸運(yùn)地,正如在章節(jié)討論的這些驗(yàn)證控件不會(huì)強(qiáng)迫你做困難 的選擇。 這些驗(yàn)證控件會(huì)自動(dòng)地產(chǎn)生客戶端代碼和服務(wù)器端代碼。 如果一個(gè)瀏覽器有能力支持 JavaScript ,客戶端的驗(yàn)證腳本將會(huì)自動(dòng)返回到瀏覽器。 如果一個(gè)瀏覽器不支持 JavaScript,那個(gè)驗(yàn)證規(guī)則會(huì)自動(dòng)在服務(wù)器端代碼中執(zhí)行。 然而你需要注意的是,客戶端的驗(yàn)證僅僅能夠工作在 。 尤其,正如這一章討論的客戶端腳本不可能在任意本本的瀏覽器中運(yùn)行。 控制字段 : RequiredFieldValidator 控件 你用這個(gè)控件來(lái)檢查在一個(gè) Web窗體中是否為空, 典型地,你和 TextBox 控件一起使用這個(gè)控件。 然而,這個(gè)控件也可以用在其他的輸入型控件,例如: RadioButtonList.控件 。 驗(yàn)證表達(dá)式 : RegularExpressionValidator 控件 你能使用 RegularExpressionValidator 控件來(lái)驗(yàn)證輸入的值是否和定義的正則表達(dá)式相匹配。 例如:你能使用這控件來(lái)檢查一個(gè)用戶是否輸入一個(gè)合法的電子郵件地址,電話號(hào)碼,用戶名或密碼。怎樣用一個(gè)正則表達(dá)式來(lái)完成這些驗(yàn)證任務(wù)將會(huì)在下面的例子中一一列出。 比較值 : CompareValidator 控件 這個(gè) CompareValidator 控件用于比較一個(gè)輸入的數(shù)據(jù)和另外一個(gè)值是否相同。另外一個(gè)值可能是固定值,例如:一個(gè)特定的數(shù)字或者是輸入到另一個(gè)控件中的一個(gè)值。 總結(jié)錯(cuò)誤 : ValidationSummary 控件 假想一個(gè)頁(yè)面有 50個(gè)字段假如你僅僅用上部分討論的那些驗(yàn)證控件來(lái)顯示錯(cuò)誤看見一個(gè)錯(cuò)誤在頁(yè)面中將是很難的。 例如:你可能需要滾動(dòng)到第 48個(gè)頁(yè)面字段來(lái)找到這個(gè)錯(cuò)誤信息。 幸好,微軟除了包含上面提到的控件還包括 ValidationSummary 控件。 你能用這控件綜合所有的錯(cuò)誤信息在一 個(gè)頁(yè)面的上端或者你想要的任何一個(gè)地方。 4. 先進(jìn)的控件編程 保存瀏覽狀態(tài) 默認(rèn)地,幾乎所有的 控件都會(huì)在先前的窗體中保留他們的屬性值。 舉例來(lái)說(shuō),如果你輸入文本到一個(gè) Lebel標(biāo)簽上然后提交那個(gè)頁(yè)面,當(dāng)那個(gè)頁(yè)面再次被訪問(wèn)那個(gè)Lebel標(biāo)簽的內(nèi)容將會(huì)被保存下來(lái)。 瀏覽狀態(tài)的妙處是它不依賴任何的特定服務(wù)器或?yàn)g覽器的屬性。 尤其,它不依賴cookies, session變量 、或應(yīng)用程序變量。 瀏覽狀態(tài)在一個(gè)名叫做 VIEWSTATE的隱藏頁(yè)面中執(zhí)行,這個(gè)隱藏頁(yè)面自動(dòng)創(chuàng)建 每個(gè) Web窗體。 當(dāng)靈活的 應(yīng)用時(shí) , 瀏覽狀態(tài)能夠在你的網(wǎng)站中產(chǎn)生藝術(shù)性的和積極的效果,例如:如果你在一個(gè)支持瀏覽狀態(tài)的控件中顯示數(shù)據(jù)庫(kù)數(shù)據(jù),你不需要每次都返回到需要反饋到服務(wù)器的數(shù)據(jù)庫(kù)頁(yè)面。 你能夠自動(dòng)地保存頁(yè)面里的數(shù)據(jù)狀態(tài)。 顯示和隱藏內(nèi)容 假想你正在用一個(gè)可選擇的部分創(chuàng)造頁(yè)面。 舉例來(lái)說(shuō),假想你正在創(chuàng)造一種在線納稅系統(tǒng),而且你想要顯示或者隱藏一個(gè)包含適用于已婚的稅文件編檔員的問(wèn)題的部分。 或者 , 假想你想要添加一個(gè)幫助按鈕到網(wǎng)站上去。 你可能想要隱藏或者顯示完成依靠用戶參考的問(wèn)題的詳細(xì)說(shuō)明。 最后,假想你想要把一個(gè) tax form 變成很多頁(yè)面,以便一個(gè)人每次只看那個(gè) tax form的一部分。 在下列的部分中,你學(xué)會(huì)用屬性設(shè)置在一個(gè)窗體中來(lái)隱藏或顯示控件。 你學(xué)會(huì)用單個(gè)控件和一組控件設(shè)置 Visible and Enabled屬性來(lái)隱藏和顯示頁(yè)面內(nèi)容 。 使用 Visible and Enabled屬性 每個(gè)控件 ,包括 HTML 和 Web控件 ,有一個(gè) Visible 屬性來(lái)決定那個(gè)控件是否可見。 當(dāng)一個(gè)控件的 Visible是 false值,那個(gè)控件就不會(huì)在頁(yè)面上顯示;那個(gè)控件也不會(huì)進(jìn)一步運(yùn)行。 Web控件 (不是每個(gè) HTML 控件 ) 還 有一個(gè)叫 Enabled的屬性 。當(dāng) Enabled的屬性是false值,你用的瀏覽器是 ,也不起作用了,當(dāng)用其他的瀏覽器的時(shí)候,如:網(wǎng)景瀏覽器那個(gè)控件不會(huì)被封,但它也是不起作用的。 使瀏覽狀態(tài)失效 在特定的環(huán)境中,你可能想要對(duì)一個(gè)單獨(dú)的控件或 狀態(tài)失效。 舉例來(lái)說(shuō) , 你可能使用一個(gè)有包含許多數(shù)據(jù)的控件 .(假想一個(gè)RadioButtonList 控件控制 1,000 個(gè)選項(xiàng) )假如你擔(dān)心頁(yè)面數(shù)據(jù)會(huì)大大的降低頁(yè)面的顯示速度,你可能不想要加載數(shù)據(jù)到隱 藏的 VIEWSTATE頁(yè)面字段。 使用豐富頁(yè)面的控件 在下列的部分中,你學(xué)會(huì)在 Framework怎樣使用三種特征控件。學(xué)會(huì)該如何使用日歷控件顯示交互式日歷, AdRotator控件顯示滾動(dòng)的廣告, HTMLInputFile控件來(lái)接受文件的上傳。 注意:請(qǐng)將外文文獻(xiàn)原文復(fù)印件附在后面。 外文文獻(xiàn) Technique 1. Building Pages and the .NET Framework is part of Microsoft39。s overall .NET framework, which contains a vast set of programming classes designed to satisfy any conceivable programming need. In the following two sections, you learn how fits within the .NET framework, and you learn about the languages you can use in your pages. The .NET Framework Class Library Imagine that you are Microsoft. Imagine that you have to support multiple programming languages— such as Visual Basic, JScript, and C++. A great deal of the functionality of these programming languages overlaps. For example, for each language, you would have to include methods for accessing the file system, working with databases, and manipulating strings. Furthermore, these languages contain similar programming constructs. Every language, for example, can represent loops and conditionals. Even though the syntax of a conditional written in Visual Basic differs from the syntax of a conditional written in C++, the programming function is the same. Finally, most programming languages have similar variable data types. In most languages, you have some m