2013年10月30日 星期三

CustomValidator OnServerValidate event not Firing? 不會進入OnServerValidate事件?

在新增使用者的介面,我想要使用CustomValidator 在資料送出前檢查使用者帳戶是否已經存在資料庫。CustomValidator 可使用OnServerValidate事件,在後台進行自己想要的驗證過程。


但是測試的時候卻發現,按下確認按鈕後並不會進入OnServerValidate事件!ControlToValidateValidationGroup屬性都有設好,但就是不會進入,到底是為什麼呢?



上網搜尋原因,原來是它必須要在觸發"Page.IsValid"的時候,才會進入OnServerValidate事件,否則根本不會有驗證的效果。所以需要在確認按鈕的Click事件裡面,檢查Page.IsValid。

if (Page.IsValid)
{
    ... ...
}

但是按下確認按鈕後,還是不行!! 為什麼呢?在確認按鈕的Click事件加入中斷點,發現根本沒有進入Click事件...
原來是跟頁面生命週期的概念有關了~~因為按下按鈕後,頁面會進行一次Postback,也就是一次重生,重生過程中會先進行Validate,才會處理其他事件(按鈕Click)。也就是畫面中其他欄位的Validator產生作用了,有些欄位並沒有通過驗證,所以根本不會進行到Click的動作。

所以當其他欄位都正確填入,順利通過驗證後,按下確認按鈕,就會執行到 if (Page.IsValid) 程式碼,之後才會觸發進入OnServerValidate事件。





沒有留言:

張貼留言

跟我說說話吧!