ASP.NET框架具有強(qiáng)大的功能和不錯(cuò)的靈活性。你可創(chuàng)建服務(wù)器端代碼來完成任何類型的任務(wù),但在許多任務(wù)中,仍然只有客戶端JavaScript才最方便。在ASP.NET Web窗體中添加JavaScript類似于把它添加到其他任何類型的網(wǎng)頁中。但是,將代碼綁定到ASP.NET窗體元素時(shí),卻需要一定的技巧。
為什么要使用JavaScript?
客戶端JavaScript的優(yōu)點(diǎn)在其他許多文章中都有詳盡的論述。其實(shí)最主要的優(yōu)點(diǎn)就是性能。雖然能用C#或VB.NET來開發(fā)相同的功能,但這要求和服務(wù)器建立一次額外的往返行程,所以必然損失一定的性能。相反,JavaScript代碼和網(wǎng)頁一起下載,并由瀏覽器負(fù)責(zé)執(zhí)行,不會(huì)牽涉到多余的服務(wù)器調(diào)用。我們經(jīng)常用這種技術(shù)進(jìn)行字段驗(yàn)證、確認(rèn)對(duì)話框以及打開其他窗口。
下面將講解如何將JavaScript包括到一個(gè)標(biāo)準(zhǔn)的網(wǎng)頁中。然后,我們準(zhǔn)備采取一些額外的步驟,讓JavaScript能夠與ASP.NET Web窗體良好地協(xié)作。
傳統(tǒng)Web窗體
普通網(wǎng)頁含有各種標(biāo)準(zhǔn)化的區(qū)域,比如head和body。通常,JavaScript函數(shù)要放到網(wǎng)頁的head部分,使其在body之前加載。等body加載之后,立即就能使用它們。對(duì)函數(shù)的調(diào)用可在body的各個(gè)HTML元素中進(jìn)行。例如以下JavaScript函數(shù):
function confirmSubmit() {
var doc = document.forms[0];
var msg = "Are you sure you want to submit this data?";
if (confirm(msg)) {
doc.submit();
} else {
// do nothing
} }
該函數(shù)的作用十分簡(jiǎn)單:它要求用戶確認(rèn)是否想提交文檔。如果在確認(rèn)對(duì)話框中單擊Yes,就提交文檔;否則什么事情都不發(fā)生。該函數(shù)可輕松地綁定到一個(gè)HTML提交按鈕:
<input type=”button” value=”submit” name=”butSubmit” onClick=”confirmSubmit();”>
用戶單擊提交按鈕后,會(huì)出現(xiàn)如圖A所示的消息。
圖A
雖然上述JavaScript非常簡(jiǎn)單,但你隨時(shí)都可對(duì)其進(jìn)行增強(qiáng),以實(shí)現(xiàn)任何需要的邏輯。由于它避免了對(duì)服務(wù)器的額外調(diào)用,所以有助于提升性能。但是,在ASP.NET Web窗體中添加這種類型的功能時(shí),卻不如在普通Web窗體中添加時(shí)直觀。
首先,函數(shù)要添加到窗體的head部分(參見圖B)。之后,必須從一個(gè)ASP.NET控件中調(diào)用它。圖B展示了按鈕聲明。
圖B
最關(guān)鍵的一步就是將ASP.NET按鈕綁定到JavaScript函數(shù)。這需要使用ASP.NET按鈕UserControl對(duì)象的Attributes屬性。Attributes屬性提供了一個(gè)Add方法,允許為按鈕添加事件。為此需要使用以下VB.NET代碼:
butSubmit.Attributes.Add("onClick", "return confirmSubmit();")
圖C展示了Visual Studio .NET環(huán)境中的VB.NET代碼。
圖C
我個(gè)人認(rèn)為這種語法容易使人混淆,因?yàn)槲乙蚜?xí)慣了標(biāo)準(zhǔn)的Web窗體語法。但是,如果將標(biāo)準(zhǔn)onClick事件直接輸入ASP.NET Web窗體(HTML源代碼)中會(huì)導(dǎo)致錯(cuò)誤。所以,我只好研究一下文檔,了解正確的語法是什么。
當(dāng)然,代碼可以輕松地?cái)U(kuò)展。ASP.NET提供了驗(yàn)證控件,但使用本文的代碼,可輕松地添加和引用JavaScript。下面來看看如何在提交之前驗(yàn)證兩個(gè)Name字段。
下面對(duì)第一個(gè)例子的示范代碼進(jìn)行擴(kuò)展,在其中添加兩個(gè)文本字段,如圖D所示。這些字段是用以下JavaScript代碼來驗(yàn)證的:
var doc = document.forms[0];
var msg = "";
var msg = "";
if (doc.txtFirstName.value == "") {
msg += "- First Name" + "\n";
}
if (doc.txtLastName.value == "") {
msg += "- Last Name" + "\n";
}
if (msg == "") {
doc.submit();
} else {
var valMsg1 = "The following required fields are missing.";
var valMsg2 = "Please complete and resubmit."
alert(valMsg1 + "\n\n" + valMsg2 + "\n\n" + msg);
return;
} }
這是一個(gè)非常基本的函數(shù)。它檢查Name字段中的字符。如果字段不為空,就提交文檔。否則會(huì)顯示一條消息,要求用戶填寫字段并重新提交。函數(shù)通過相同的語法綁定到按鈕:
butSubmit.Attributes.Add("onClick", "return valSubmit();")
好戲才剛剛開始
使用按鈕UserControl對(duì)象的Attributes屬性來綁定一個(gè)JavaScript事件,這只是該屬性眾多應(yīng)用中的一種。還可用Attributes來更改與控件綁定的各種顏色,以及應(yīng)用級(jí)聯(lián)樣式(CSS)元素等等。詳細(xì)情況可參考聯(lián)機(jī)幫助或者其他.NET文檔。
不要重復(fù)別人的勞動(dòng)
Internet富含豐富的JavaScript代碼,它們可用于完成幾乎任何任務(wù),所以完全沒必要重復(fù)別人的勞動(dòng)。雖然ASP.NET十分強(qiáng)大,但作為我們親密的老朋友,JavaScript的作用也不可小覷,它能幫助我們完成常見的任務(wù),并由客戶端來減輕服務(wù)器的負(fù)擔(dān)。