close

當VS提供給你的一些驗證項目不符合你使用時,CustomValidator就可以派的上用場了。

在CustomValidator使用上,可做client端與server端的兩種驗證,先來講client端的驗證。

 

首先,假設我們有一個TextBox物件,並新增一個CustomValidator,將其ControlToValidate綁定好。

然後在ClientValidationFunction的地方,填上等會兒要在client端做驗證的javascript function名稱。

要注意的是,這裡的function名稱,只可填名稱的部份,參數列的括號那些就不要寫了。為什麼要注意這個呢,因為在Button元件中,有一個OnClientClick的屬性,也是用來觸發client端javascript function,在那裡就要將function名稱連同括號(或參數)都寫進去才可以。兩者很相似的情況,卻有不同的寫法,因此要特別注意。

例如,我們在javascript中,要做一個叫validateCheck()的function,則在ClientValidationFunction填入validateCheck。

接下來,要注意的是這個javascript有一個特別的寫法,一定要傳入兩個如事件處理用的參數。

我們將之取名為sender和args。因此javascript如下:

    function validateCheck(sender, args) {
        if (args.Value == "test") {
            args.IsValid = true;
        } else {
            args.IsValid = false;
        }
    }

 

其中我們需要使用到的是第二個參數args,其中Value代表輸入的值(V要大寫),而IsValid則用來控制這個驗證項目是否通過,依照自己的邏輯來寫入true或false。

假設在textbox中輸入text才能通過驗證,若輸入非test,則驗證Error Msg就會顯示出來。

 

這是在client端的驗證,若是要再加強一道防線,則可以在server端也如法炮製,做一個驗證的防護。

先在CustomValidator的屬性上,找到事件的地方(閃電圖示),在ServerValidate右邊空白處點兩下,則VS會幫你產生好一個事件處理的method,比如叫CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)。

這兩個參數,就如同剛剛client端的那兩個參數一樣,我們也拿第二個參數args來做驗證判斷。

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (args.Value.Equals("test"))
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }         
    }

 

記得,使用server端的驗證時,在送出表單的程式(例如Button_Click裡),需要加上this.isValid來判斷是否全部的驗證項目都通過了,才可執行後續程序,否則就算server端剛剛的args.IsValid設為false,還是會直接執行Button_Click的內容喔。

arrow
arrow
    全站熱搜

    rexmen 發表在 痞客邦 留言(0) 人氣()