Visual Studio.Net 2005中驗證控件的一個使用方法

      在Visual Studio.Net2005(FrameWork.Net2.0)中有一些很好用的驗證控件,我想大家都已經很熟悉了,而且在微軟的MSDN和博客園中也有不少同僚們或深或淺地講解過這些驗證控件,那麼我在這裏就不過多闡述這些驗證控件的原理和基本使用了,我要講解的是什麼呢?請先看遇到的問題!

      這些驗證控件和服務器控件(如:Button等)都有一個屬性就是ValidationGroup,相信應該都很瞭解。

      第一種常用情況:當您放入幾個驗證控件和一個服務器控件,而屬性ValidationGroup的值都是空值時(即不對其分組驗證),點擊服務器某個控件(如:Button)就會執行所有驗證控件的驗證。而假如這個Web頁中還有一個服務器控件Button時,屬性ValidationGroup值也是空值,那麼這兩個服務器控件Button都是執行相同的驗證,如果想讓這兩個服務器控件Button執行不同的驗證,那麼就是我們第二種常用情況了。

      第二種常用情況:分組驗證。【A】一個服務器Button(命名爲Btn1)執行其中幾個驗證控件(比如有2個驗證控件),【B】而另一個服務器Button(命名爲Btn2)執行剩下來的幾個驗證控件(比如有3個驗證控件),那麼就需要對屬性ValidationGroup進行設置:在【A】中的幾個控件(服務器控件和驗證控件)的ValidationGroup屬性值設置爲【vg1】,在【B】中的幾個控件(服務器控件和驗證控件)的ValidationGroup的屬性設置爲【vg2】,這樣再分別點擊兩個Button就會執行不同的驗證。然而再假如這個Web頁中還有一個服務器控件Button(命名爲Btn),我們想讓這個Button執行所有驗證(即執行Btn1的驗證又執行Btn2的驗證,共5個驗證控件),此時我們該怎麼辦?這就是我們要講解的內容第三種常用情況了。

      第三種常用情況:即要分組又要統一的驗證。接着第二種常用情況中的假設繼續敘述,如果把Btn的ValidationGroup屬性設置爲空值那麼是否能達到期望效果呢?答案是“不能”,如果ValidationGroup屬性設置爲空值,那麼在Web頁的整個驗證過程中會解釋成您不希望Btn參與驗證,因此此時點擊Btn會直接發送頁面到後臺,那對ValidationGroup屬性起名時用【大組.小組】等類似的方法行嗎(即Btn中ValidationGroup屬性值是【大組】,而Btn1和Btn2中ValidationGroup屬性值分別是【大組.小組1】和【大組.小組2】)?答案依舊是“不行”。那怎麼辦,沒有簡單可行的辦法了嗎?當然是有的了,對,就是用JavaScript控制。下面詳細介紹一下過程和使用JavaScript達到目的時應該注意的事情。

      我在期望達到第三種常用情況的效果時,也是在Google搜索、百度搜索、MSDN、CSDN和博客園中尋找了很久,不知道是網絡中沒有,還是大家不常用此種情況驗證或者是都會使用了覺得沒必要說這個(我很菜,別打我),或是我沒有找到。本想找個講解或是現成例子就不用自己研究了,看來是偷懶不得的。經過研究發現只要服務器控件Button有驗證控件與其在一個組中,那麼點擊服務器控件Button後,先執行OnClientClick規定的JavaScript,再去執行驗證操作,那麼問題迎刃而解了。

     解決問題的方法及源代碼:

     1、三個服務器控件Button和五個驗證控件的ValidationGroup屬性設置。

Btn          vg          OnClientClick屬性值:Btnclick();

Btn1        vg1        OnClientClick屬性值:Btn1click();

Btn2        vg2        OnClientClick屬性值:Btn2click();

驗證1       vg1

驗證2       vg1

驗證3       vg2

驗證4       vg2

驗證5       vg     (也可設置爲空值,但不能再是vg1或vg2,注意:必須要給Btn設置一個可執行的驗證控件)

      2、在Web頁中增加一個<Script></Script>JS腳本。  

 1 <script type="text/javascript">
 2 <!--
 3 function Btn1click()
 4 {
 5     document.getElementById('<%=RequiredFieldValidator1.ClientID %>').validationGroup = 'vg1';
 6     document.getElementById('<%=RegularExpressionValidator1.ClientID %>').validationGroup = 'vg1';
 7 }
 8 
 9 function Btn2click()
10 {
11     document.getElementById('<%=RequiredFieldValidator2.ClientID %>').validationGroup = 'vg2';
12     document.getElementById('<%=RegularExpressionValidator2.ClientID %>').validationGroup = 'vg2';
13     document.getElementById('<%=RegularExpressionValidator3.ClientID %>').validationGroup = 'vg2';
14 }
15 
16 function Btnclick()
17 {
18     document.getElementById('<%=RequiredFieldValidator1.ClientID %>').validationGroup = 'vg';
19     document.getElementById('<%=RegularExpressionValidator1.ClientID %>').validationGroup = 'vg';
20     document.getElementById('<%=RequiredFieldValidator2.ClientID %>').validationGroup = 'vg';
21     document.getElementById('<%=RegularExpressionValidator2.ClientID %>').validationGroup = 'vg';
22     document.getElementById('<%=RegularExpressionValidator3.ClientID %>').validationGroup = 'vg';
23 
24 // -->
25 </script>

      這樣我們就能達到我們期望的即要分組又要統一的驗證。但這裏需要注意的就是:每個參與驗證的服務器控件Button在沒有寫任何JavaScript代碼都必須分配至少一個驗證控件能讓其執行,否則您就算寫了控制驗證控件的JavaScript代碼,這個服務器控件也不驗證,切記,切記!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章