將JavaScript事件綁定到ASP.NET對象

2010-08-28 10:50:44來源:西部e網作者:

  ASP.NET框架具有強大的功能和不錯的靈活性。你可創(chuàng)建服務器端代碼來完成任何類型的任務,但在許多任務中,仍然只有客戶端JavaScript才最方便。在ASP.NET Web窗體中添加JavaScript類似于把它添加到其他任何類型的網頁中。但是,將代碼綁定到ASP.NET窗體元素時,卻需要一定的技巧。

  為什么要使用JavaScript?
 
  客戶端JavaScript的優(yōu)點在其他許多文章中都有詳盡的論述。其實最主要的優(yōu)點就是性能。雖然能用C#或VB.NET來開發(fā)相同的功能,但這要求和服務器建立一次額外的往返行程,所以必然損失一定的性能。相反,JavaScript代碼和網頁一起下載,并由瀏覽器負責執(zhí)行,不會牽涉到多余的服務器調用。我們經常用這種技術進行字段驗證、確認對話框以及打開其他窗口。

  下面將講解如何將JavaScript包括到一個標準的網頁中。然后,我們準備采取一些額外的步驟,讓JavaScript能夠與ASP.NET Web窗體良好地協(xié)作。

  傳統(tǒng)Web窗體

  普通網頁含有各種標準化的區(qū)域,比如head和body。通常,JavaScript函數(shù)要放到網頁的head部分,使其在body之前加載。等body加載之后,立即就能使用它們。對函數(shù)的調用可在body的各個HTML元素中進行。例如以下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ù)的作用十分簡單:它要求用戶確認是否想提交文檔。如果在確認對話框中單擊Yes,就提交文檔;否則什么事情都不發(fā)生。該函數(shù)可輕松地綁定到一個HTML提交按鈕:
 
<input type=”button” value=”submit” name=”butSubmit” onClick=”confirmSubmit();”>
 
  用戶單擊提交按鈕后,會出現(xiàn)如A所示的消息。

圖A

\

  示范JavaScript確認對話框

  雖然上述JavaScript非常簡單,但你隨時都可對其進行增強,以實現(xiàn)任何需要的邏輯。由于它避免了對服務器的額外調用,所以有助于提升性能。但是,在ASP.NET Web窗體中添加這種類型的功能時,卻不如在普通Web窗體中添加時直觀。

  首先,函數(shù)要添加到窗體的head部分(參見B)。之后,必須從一個ASP.NET控件中調用它。圖B展示了按鈕聲明。

圖B

\

  示范ASP.NET Web窗體

  最關鍵的一步就是將ASP.NET按鈕綁定到JavaScript函數(shù)。這需要使用ASP.NET按鈕UserControl對象的Attributes屬性。Attributes屬性提供了一個Add方法,允許為按鈕添加事件。為此需要使用以下VB.NET代碼:
 
butSubmit.Attributes.Add("onClick", "return confirmSubmit();")
 
  圖C展示了Visual Studio .NET環(huán)境中的VB.NET代碼。

圖C

\

  為按鈕添加函數(shù)

  我個人認為這種語法容易使人混淆,因為我已習慣了標準的Web窗體語法。但是,如果將標準onClick事件直接輸入ASP.NET Web窗體(HTML源代碼)中會導致錯誤。所以,我只好研究一下文檔,了解正確的語法是什么。

  當然,代碼可以輕松地擴展。ASP.NET提供了驗證控件,但使用本文的代碼,可輕松地添加和引用JavaScript。下面來看看如何在提交之前驗證兩個Name字段。

  下面對第一個例子的示范代碼進行擴展,在其中添加兩個文本字段,如D所示。這些字段是用以下JavaScript代碼來驗證的:
 
function valSubmit() {
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;
} }
 
  這是一個非;镜暮瘮(shù)。它檢查Name字段中的字符。如果字段不為空,就提交文檔。否則會顯示一條消息,要求用戶填寫字段并重新提交。函數(shù)通過相同的語法綁定到按鈕:
 
butSubmit.Attributes.Add("onClick", "return valSubmit();")

\

  添加好的文本字段

  好戲才剛剛開始

  使用按鈕UserControl對象的Attributes屬性來綁定一個JavaScript事件,這只是該屬性眾多應用中的一種。還可用Attributes來更改與控件綁定的各種顏色,以及應用級聯(lián)樣式(CSS)元素等等。詳細情況可參考聯(lián)機幫助或者其他.NET文檔。

  不要重復別人的勞動

  Internet富含豐富的JavaScript代碼,它們可用于完成幾乎任何任務,所以完全沒必要重復別人的勞動。雖然ASP.NET十分強大,但作為我們親密的老朋友,JavaScript的作用也不可小覷,它能幫助我們完成常見的任務,并由客戶端來減輕服務器的負擔。

關鍵詞:ASP.NET

贊助商鏈接: