首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CompareValidator验证日期

使用CompareValidator验证日期
EN

Stack Overflow用户
提问于 2013-04-22 02:59:37
回答 1查看 4.7K关注 0票数 0

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

代码语言:javascript
复制
<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中有以下内容

代码语言:javascript
复制
cvDateOfBirth.ValueToCompare = DateTime.Today.ToString("MM/dd/yyyy");

在CompareValidator中,我将Type设置为string。如果我设定日期,我会得到一个错误。

“ValueToCompare”属性“cvDateOfBirth”的值“04/21/2013”不能转换为“日期”类型。

我将日期格式化为MM/dd/yyyy,因为如果我不将日期格式化为首先使用MM (并将其保留为默认值),则会插入日期和月份,如果月份大于12 (SQL 2008 R2),则会将日期和月份反转或超出范围异常。如果我离开类型为字符串,验证工作正常,但只在今年。如果我选择一个类似于2012年12月31日(2012年12月31日)的日期,验证就失败了。有人能指出我做错了什么吗。另外,我读到了一些帖子,他们说类型必须设置为CompareValidator的日期,但是我得到了前面提到的一个错误。此外,当我将它与文本框中的字符串进行比较时,为什么要将其设置为日期而不是字符串。谢谢你帮忙。

EN

回答 1

Stack Overflow用户

发布于 2013-04-22 06:52:23

首先,您必须做(指定比较日期和今天日期):

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            cvDateOfBirth.ValueToCompare = DateTime.Today.Date.ToString("dd/MM/yyyy");
        }
    }

那么获得结果的2种方法,您想要的:

First Way :

代码语言:javascript
复制
<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中选择日期,将其保存在数据库中:

代码语言:javascript
复制
protected void OnSave_Click(object sender, EventArgs e)
{
    DateTime selcetdDate=Convert.ToDateTime(txtDateOfBirth.Text);
    string date = selcetdDate.ToString("MM/dd/yyyy");
}

实现它的其他方法:

代码语言:javascript
复制
<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文件中

代码语言:javascript
复制
protected void OnSave_Click(object sender, EventArgs e)
{
    string date = txtDateOfBirth.Text;
}

CompareValidator属性ValueToCompare用于日期的默认格式dd-MM-yyyy,因此我们必须手动进行此操作,以便与其他日期格式进行比较。因此,您可以使用上述两个选项与日期格式MM/dd/yyyy进行比较验证。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16138771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档