2013-04-02 131 views
0

我是ASP.NET新手,我想將RangeValidator設置爲驗證18歲以上的出生日期。我已經設置了它,但它不起作用。在ASP.NET中驗證年齡限制

我該如何解決?

<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtDOB" 
        ErrorMessage="less than 18 " MaximumValue="01/01/1995" MinimumValue="01/01/1888" 
        SetFocusOnError="True" Type="Date" Style="color: #FF0000;"></asp:RangeValidator> 
+0

訪問http://stackoverflow.com/questions/939802/date-validation-with-asp-net-validator?rq=1 – Satpal

回答

3

我建議您使用客戶端JavaScript函數asp:CustomValidator

Custom Validator

你可以做這樣的事情(注意,這是未經測試,只是把我的頭頂部):

<asp:CustomValidator ID="CustomValidator1" runat="server" 
    EnableClientScript="true" 
    ErrorMessage="less than 18" 
    ClientValidationFunction="checkDate" 
    ControlToValidate="txtDOB"> 
</asp:CustomValidator> 

假設日期是寫在這個格式「DD/MM/YYYY」

function checkDate() { 
    var enteredDate=document.getElementById('<%=txtDOB.ClientID%>').value; 
    var dateValues=enteredDate.split("/"); 
    var dateToCheck = new Date(dateValues[2], dateValues[1]-1, dateValues[0]); 
    var today = new Date(); 
    var dateValid = new Date(today.getFullYear()-18, today.getMonth()-1, today.getDate()); 
    if (dateToCheck < dateValid) { 
    args.IsValid = false; 
    } 
    else { 
    args.IsValid = true; 
    } 
} 

注意

  1. javascript對1月使用0,因此該月使用-1。
  2. 如果javascript被禁用,您應該將ServerValidation函數添加到自定義驗證器。
+0

關於點#2,他不能只檢查'Page.IsValid( )'在服務器端? –

+1

@ShaiCohen他也需要在服務器端定製代碼。 – MikeSmithDev

+0

@MikeSmithDev:你確定嗎?我的理解是,'Page.Validate()'後跟'Page.IsValid'是任何和所有驗證服務器控件的服務器端驗證。來自MSDN:**要使此屬性返回true,當前驗證組中的所有驗證服務器控件都必須成功驗證。 **我錯過了什麼嗎? –