【问题标题】:Validation for date with CompareValidator使用 CompareValidator 验证日期
【发布时间】:2013-04-22 02:59:37
【问题描述】:

我正在使用带有日历扩展器的文本框来输入出生日期。我正在验证日期是今天或更早。我有以下代码:

<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 中,我将类型设置为字符串。如果我将其设置为 Date 我会收到错误

“cvDateOfBirth”的 ValueToCompare 属性的值“04/21/2013”​​无法转换为“Date”类型。

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

【问题讨论】:

  • 以 DD/MM/YYYY 格式传递日期....看看它是否有效
  • 你需要传递Type="Date"
  • 需要传递比较类型。请参考this link
  • 如果我将日期传递为 DD/MM/YYYY 而不是在 DB 中,则日期和月份会颠倒
  • 什么版本的.net?您的代码在 .Net 4 上适用于我。

标签: asp.net


【解决方案1】:

首先你必须做(指定比较日期与今天的日期):

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

然后 2 方法来获得你想要的结果::


第一种方式:

<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;
}

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

干杯!

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多