繁体   English   中英

使用CompareValidator验证日期

[英]Validation for date with CompareValidator

我正在使用带有日历扩展程序的文本框来输入出生日期。 我正在确认日期为今天或更早。 我有以下代码:

<asp:TextBox ID="txtDateOfBirth" runat="server" </asp:TextBox><ajaxToolkit:CalendarExtender ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth" Format="MM/dd/yyyy" </ajaxToolkit:CalendarExtender>

<asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" ErrorMessage="Must be today or older" Display="Dynamic" Operator="LessThanEqual"></asp:CompareValidator>

我的Page_Load中包含以下内容

cvDateOfBirth.ValueToCompare = DateTime.Today.ToString("MM/dd/yyyy");

在CompareValidator中,我将Type设置为string。 如果将其设置为日期,则会出现错误

无法将'cvDateOfBirth'的ValueToCompare属性的值'04 / 21/2013'转换为'Date'类型。

我将日期格式化为MM / dd / yyyy,因为如果我不格式化日期以首先拥有MM(并将其保留为默认值),则会插入日期和月份反转或超出范围的异常(如果月份为月份)大于12(SQL 2008 R2)。 如果我将“类型”保留为“字符串”,则验证可以正常运行,但仅适用于今年。 如果我选择的日期为2012年12月31日(2012年12月31日),则验证失败。 谁能指出我做错了什么。 另外,我阅读了一些帖子,他们说必须将CompareValidator的Type设置为Date,但是我收到了上面提到的错误。 当我将其与文本框中的字符串进行比较时,为什么还要将其设置为“日期”而不是“字符串”。 感谢帮助。

首先,您必须做(将比较日期与今天的日期分配):

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            cvDateOfBirth.ValueToCompare = DateTime.Today.Date.ToString("dd/MM/yyyy");
        }
    }

然后两种获取结果的方式,您想要::


第一种方式:

<asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox><ajaxtoolkit:CalendarExtender
            ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth"
            Format="dd/MM/yyyy">
        </ajaxtoolkit:CalendarExtender>
        <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" SetFocusOnError="true"
            Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date"
            ForeColor="Red"></asp:CompareValidator>

然后在.cs文件后面的代码中以MM-dd-yyy格式获取选定日期以保存为数据库:

protected void OnSave_Click(object sender, EventArgs e)
{
    DateTime selcetdDate=Convert.ToDateTime(txtDateOfBirth.Text);
    string date = selcetdDate.ToString("MM/dd/yyyy");
}


实现它的其他方法:

<script type="text/javascript">
    function getDOB() {
        var selected = document.getElementById('lbl_date').value;
        var txtDateOfBirth = document.getElementById('txtDateOfBirth');
        if (selected != "") {
            var st = selected.split('/');
            txtDateOfBirth.value = st[1] + '/' + st[0] + '/' + st[2];
        }
        else
            txtDateOfBirth.value = "";
    }
</script>

 <asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox>
        <asp:TextBox ID="lbl_date" runat="server" Text="" style="display:none;" onchange="getDOB()"></asp:TextBox>
        <ajaxtoolkit:CalendarExtender
            ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="lbl_date" PopupButtonID="txtDateOfBirth"
            Format="dd/MM/yyyy">
        </ajaxtoolkit:CalendarExtender>
        <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="lbl_date" SetFocusOnError="true"
            Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date"
            ForeColor="Red"></asp:CompareValidator>
    </div>

在.cs文件的代码隐藏中

protected void OnSave_Click(object sender, EventArgs e)
{
    string date = txtDateOfBirth.Text;
}

具有默认格式dd-MM-yyyy日期的CompareValidato r属性ValueToCompare ,因此我们必须手动执行此操作以与其他日期格式进行比较。 因此,您可以使用上述两个选项来获取日期格式为MM/dd/yyyy比较验证。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM