在新增使用者的介面,我想要使用CustomValidator 在資料送出前檢查使用者帳戶是否已經存在資料庫。CustomValidator 可使用OnServerValidate事件,在後台進行自己想要的驗證過程。
但是測試的時候卻發現,按下確認按鈕後並不會進入OnServerValidate事件!ControlToValidate和ValidationGroup屬性都有設好,但就是不會進入,到底是為什麼呢?
上網搜尋原因,原來是它必須要在觸發"Page.IsValid"的時候,才會進入OnServerValidate事件,否則根本不會有驗證的效果。所以需要在確認按鈕的Click事件裡面,檢查Page.IsValid。
if (Page.IsValid)
{
... ...
}
但是按下確認按鈕後,還是不行!! 為什麼呢?在確認按鈕的Click事件加入中斷點,發現根本沒有進入Click事件...
原來是跟頁面生命週期的概念有關了~~因為按下按鈕後,頁面會進行一次Postback,也就是一次重生,重生過程中會先進行Validate,才會處理其他事件(按鈕Click)。也就是畫面中其他欄位的Validator產生作用了,有些欄位並沒有通過驗證,所以根本不會進行到Click的動作。
所以當其他欄位都正確填入,順利通過驗證後,按下確認按鈕,就會執行到 if (Page.IsValid) 程式碼,之後才會觸發進入OnServerValidate事件。
沒有留言:
張貼留言
跟我說說話吧!