2013-04-02 52 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,当前验证组中的所有验证服务器控件都必须成功验证。 **我错过了什么吗? –