iT邦幫忙

DAY 18
0

給學弟的ASP.NET網頁學習經驗系列 第 18

ASP.NET學習經驗#18----CustomValidator檢查一下比較好

檢查驗證控制項如TextBox ListBox DropDownlist RadioButtonList FileUpload等等

對使用者輸入的資料進行檢查

需要使用的屬性:

ControlToValidate
:指定對哪一個控制項的內容進行驗證

ErrorMessage
:設定當驗證失敗時,顯示的錯誤訊息

Text<--如果有設定它則會顯示Text,但並不會覆蓋ErrorMessage

:設定當驗證失敗時,顯示的文字

ClientValidationFunction:指定瀏覽器端的驗證函式

ServerValidate事件:呼叫用來在伺服器上進行驗證

其他控制項上:

**CausesValidation屬性:**調整是否會觸發所有頁面上的驗證,預設是true,有此屬性的控制項都會觸發驗證控制項

(重要的調整,有些控制項是不需要去觸發驗證的,比如查詢、切換頁面等)

========================================================================

在之前使用過的網頁範例上加上個日期驗證的控制項

並設定要被驗證的TextBox與在Client端要被套用的JavaScript函式名稱

接著寫上一段JavaScript code

Function中一定要帶有兩個參數,在這設為sender與args:

<script type="text/javascript">
        function validateCheck(sender, args) {            
            var time = Date.parse(args.Value);

            if (isNaN(time)) {
                args.IsValid = false;
            } else {
                args.IsValid = true;
            }
        }
</script>

註:Date.parse()好用的計算秒數方法,可以不用寫攏長的string檢查或者正規表示法,

就可以做簡單的非單一格式轉換來當作檢查依據!!!

測試一下發現出現個可怕的問題:

其實這問題還蠻常遇到的,之前我都是在Page_Load裡設置取消使用:

protected void Page_Load(object sender, EventArgs e)
{
    UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
}

秉持循規蹈矩歸啥補啥的學習精神,還是透過 NuGet找回這失落套件原來就能解決:

AspNet.ScriptManager.jQuery

完成後就可以看到畫面並且測試囉!!可以發現驗證不通過的話是無法觸發其他事件的

但畢竟只有前端做驗證很不好(可能會被繞過去)

在加上Server端做雙重驗證更是安全(應該是這樣說沒錯吧!)

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
        DateTime dt;
        if(string.IsNullOrWhiteSpace(args.Value))
        {
            CustomValidator1.ErrorMessage = "日期必須填寫!!!";
        }
        else if (DateTime.TryParseExact(args.Value, "yyyy/MM/dd", null,                System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt) == false)
        {
            CustomValidator1.ErrorMessage = "日期格式為 yyyy/MM/dd hh:mm:ss";
            args.IsValid = false;
        }
        else
        {
            args.IsValid = true;
        }
}

註解:利用DateTime.TryParseExact()方法來給自訂的格式做轉換,可以參閱一下標準日期和時間格式字串

所有含有try的Parse可以回傳成功與否,不用去處理轉換失敗的Exception

大功告成囉!!

程式碼有任何不嚴謹的地方,還請多多包涵

.......to be continued


上一篇
ASP.NET學習經驗#17----Calendar有個日曆也不錯
下一篇
ASP.NET學習經驗#19----DataBound給你千變萬化的可能
系列文
給學弟的ASP.NET網頁學習經驗30

尚未有邦友留言

立即登入留言