在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腳本。
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代碼,這個服務器控件也不驗證,切記,切記!!!