使用自定义验证器防止将来的日期和今天的日期

时间:2013-04-01 11:51:41

标签: javascript asp.net client-side-validation custom-validators

我正在使用.NET 4中的实体框架开发项目。有一个注册页面,其中有一个出生日期字段。我想验证它,以便出生日期不能在将来或今天。此外,如果它可能比今天晚5年。

这是我的代码。

Date of Birth:
<asp:RequiredFieldValidator ID="rfv_txtbx_DOB" runat="server" ControlToValidate="txtbx_DOB" CssClass="validator" Display="Dynamic" ErrorMessage="Date of Birth Required" SetFocusOnError="True" Text="*" ValidationGroup="vg" />
<asp:CustomValidator ID="cv_txtbx_DOB" runat="server"  ControlToValidate="txtbx_DOB" CssClass="validator" Display="Dynamic" 
    ErrorMessage="Date of Birth cannot be today or in future" SetFocusOnError="True" Text="*" ValidationGroup="vg" ClientValidationFunction="validateDate"/>
<asp:TextBox ID="txtbx_DOB" runat="server" CssClass="txtbx" Width="200px" />
<ajaxToolkit:CalendarExtender ID="txtbx_DOB_CalendarExtender" runat="server" Enabled="True" Format="dd-MM-yyyy" TargetControlID="txtbx_DOB" />
<script language="javascript" type="text/javascript">
    function Validate(sender, args) {
        var currentDate = new Date().getDate();

            if (args.Value < currentDate)
                args.IsValid = true;
            else
                args.IsValid = false;
        }
</script>

2 个答案:

答案 0 :(得分:3)

function check_date()
{
var chkdate = document.getElementById("ID OF YOUR TEXT FIELD HERE").value;

var edate = chkdate.split("/");
var spdate = new Date();
var sdd = spdate.getDate();
var smm = spdate.getMonth();
var syyyy = spdate.getFullYear();
var today = new Date(syyyy,smm,sdd).getTime();
var e_date = new Date(edate[2],edate[1]-1,edate[0]).getTime();
if(e_date > today)
 {
    alert("Date is not valid");
    return false;
 }
}

答案 1 :(得分:1)

页面加载

protected void Page_Load(object sender, EventArgs e)
{
     Calendar1.EndDate = DateTime.Now;   //to dissable future  Date
}

以下是日历扩展程序中所有限制的链接

http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm

或使用以下java脚本函数

function checkDate(sender, args) {
     if (sender._selectedDate > new Date()) {
          alert("You can select a day earlier than today!");
            sender._selectedDate = new Date();
            // set the date back to the current date
            sender._textbox.set_Value(sender._selectedDate.format(sender._format))
  }